From 48be1cf480743cdc0e60dd1edc9677b4349a570d Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Sat, 13 Feb 2010 10:59:32 +0100 Subject: Imported Upstream version 3.1.4-dfsg --- Config.kmk | 75 +- Makefile.kmk | 4 +- configure | 9 +- configure.vbs | 28 +- include/VBox/cpum.h | 2 +- include/VBox/err.h | 13 +- include/VBox/pgm.h | 4 +- include/VBox/version.h | 6 +- include/VBox/vm.h | 4 + include/iprt/cdefs.h | 9 + include/iprt/time.h | 2 +- include/iprt/types.h | 4 +- .../Additions/common/VBoxGuest/VBoxGuest-solaris.c | 45 +- src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp | 21 +- src/VBox/Additions/common/VBoxGuest/linux/Makefile | 6 +- .../common/VBoxGuestLib/GenericRequest.cpp | 11 +- src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp | 11 +- .../Additions/common/VBoxGuestLib/HGCMInternal.cpp | 89 +- src/VBox/Additions/common/VBoxGuestLib/Init.cpp | 11 +- .../Additions/common/VBoxGuestLib/Makefile.kmk | 9 + .../Additions/common/VBoxGuestLib/PhysHeap.cpp | 11 +- src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp | 11 +- src/VBox/Additions/common/VBoxGuestLib/SysHlp.h | 11 +- .../Additions/common/VBoxGuestLib/VBGLInternal.h | 11 +- .../Additions/common/VBoxGuestLib/VBGLR3Internal.h | 9 + src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.c | 11 +- src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.h | 9 + .../Additions/common/VBoxGuestLib/VBoxGuestLog.h | 9 + .../common/VBoxGuestLib/VBoxGuestR3Lib.cpp | 9 + .../VBoxGuestLib/VBoxGuestR3LibClipboard.cpp | 9 + .../VBoxGuestLib/VBoxGuestR3LibCredentials.cpp | 9 + .../VBoxGuestLib/VBoxGuestR3LibDaemonize.cpp | 9 + .../common/VBoxGuestLib/VBoxGuestR3LibGR.cpp | 9 + .../VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp | 9 + .../VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp | 9 + .../common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp | 9 + .../common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp | 9 + .../common/VBoxGuestLib/VBoxGuestR3LibSeamless.cpp | 9 + .../common/VBoxGuestLib/VBoxGuestR3LibTime.cpp | 9 + .../common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp | 9 + src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp | 9 + .../VBoxGuestLib/VbglR0CanUsePhysPageList.cpp | 11 +- .../Additions/common/VBoxService/VBoxService.cpp | 16 +- .../common/VBoxService/VBoxServiceExec.cpp | 12 +- .../common/VBoxService/VBoxServiceInternal.h | 22 +- .../common/VBoxService/VBoxServiceTimeSync.cpp | 1 + .../common/VBoxService/VBoxServiceUtils.cpp | 19 +- .../common/VBoxService/VBoxServiceVMInfo-win.cpp | 303 +- .../common/VBoxService/VBoxServiceVMInfo.cpp | 31 +- src/VBox/Additions/common/crOpenGL/Makefile.kmk | 51 +- src/VBox/Additions/common/crOpenGL/fakedri_drv.c | 33 +- src/VBox/Additions/common/crOpenGL/glx_c_exports.c | 128 +- src/VBox/Additions/common/crOpenGL/load.c | 4 +- .../common/crOpenGL/pack/packspu_client.c | 44 +- src/VBox/Additions/linux/drm/vboxvideo_drm.c | 4 +- src/VBox/Additions/linux/installer/vboxadd.sh | 11 +- .../Additions/linux/sharedfolders/Makefile.module | 4 + src/VBox/Additions/linux/sharedfolders/utils.c | 46 +- src/VBox/Additions/linux/sharedfolders/vfsmod.c | 11 +- src/VBox/Additions/linux/sharedfolders/vfsmod.h | 11 + .../Additions/solaris/Installer/makepackage.sh | 63 +- .../Additions/solaris/Installer/postinstall.sh | 190 +- src/VBox/Additions/solaris/Installer/vboxguest.sh | 6 +- src/VBox/Additions/solaris/Makefile.kmk | 358 +- src/VBox/Additions/x11/VBoxClient/Makefile.kmk | 5 +- src/VBox/Additions/x11/vboxmouse/Imakefile | 48 - src/VBox/Additions/x11/vboxmouse/Makefile.kmk | 22 +- src/VBox/Additions/x11/vboxmouse/mouse.c | 17 +- src/VBox/Additions/x11/vboxmouse/undefined_15 | 1 + src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c | 42 +- src/VBox/Additions/x11/vboxvideo/Imakefile | 65 - src/VBox/Additions/x11/vboxvideo/Makefile.kmk | 5 +- src/VBox/Additions/x11/vboxvideo/undefined_68 | 2 + src/VBox/Additions/x11/vboxvideo/vboxutils_68.c | 69 +- src/VBox/Additions/x11/vboxvideo/vboxvideo.h | 3 +- src/VBox/Additions/x11/vboxvideo/vboxvideo_13.c | 4 +- src/VBox/Additions/x11/vboxvideo/vboxvideo_68.c | 40 +- src/VBox/Additions/x11/vboxvideo/vboxvideo_68.h | 23 +- src/VBox/Devices/Audio/audio.c | 6 +- src/VBox/Devices/Audio/pulse_stubs.c | 24 +- src/VBox/Devices/Audio/pulseaudio.c | 553 +- .../VBoxPkg/Include/IndustryStandard/PeImage.h | 773 ++ .../Firmware2/VBoxPkg/Include/Library/PeCoffLib.h | 392 + .../EFI/Firmware2/VBoxPkg/Include/VBoxDebugLib.h | 35 + .../EFI/Firmware2/VBoxPkg/Include/VBoxMemLayout.h | 29 + .../EFI/Firmware2/VBoxPkg/Include/VBoxPkg.h | 52 + .../VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c | 123 + .../VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf | 68 + .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c | 39 + .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c | 58 + .../VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c | 78 + .../Library/VBoxDebugLib/VBoxPrintHexDump.c | 97 + .../VBoxOemHookStatusCodeLib.c | 203 + .../VBoxOemHookStatusCodeLib.inf | 66 + .../EFI/Firmware2/VBoxPkg/VBoxLogo/VBoxLogo.inf | 41 + .../EFI/Firmware2/VBoxPkg/VBoxMisc/Makefile | 51 + .../Firmware2/VBoxPkg/VBoxMisc/efi-app/Readme.txt | 33 + src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dec | 78 + src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dsc | 418 + src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.fdf | 374 + .../Devices/EFI/Firmware2/VBoxPkg/VBoxPkgX64.dsc | 382 + .../VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c | 655 ++ .../VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf | 56 + src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd | Bin 1048576 -> 2031616 bytes src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd | Bin 1638400 -> 2031616 bytes src/VBox/Devices/Graphics/BIOS/vbe.c | 2 + src/VBox/Devices/Graphics/BIOS/vgabios.c | 4 +- src/VBox/Devices/Network/DevVirtioNet.cpp | 7 +- src/VBox/Devices/Network/DrvNAT.cpp | 1 + src/VBox/Devices/Network/slirp/bootp.c | 9 +- src/VBox/Devices/Network/slirp/bootp.h | 37 +- src/VBox/Devices/Network/slirp/ip_icmp.c | 6 +- .../Devices/Network/slirp/libalias/alias_nbt.c | 1 + src/VBox/Devices/Network/slirp/mbuf.c | 10 +- src/VBox/Devices/Network/slirp/slirp_state.h | 10 +- src/VBox/Devices/Network/slirp/socket.h | 22 +- src/VBox/Devices/Network/slirp/tcp_subr.c | 13 +- src/VBox/Devices/Storage/ATAController.cpp | 12 + src/VBox/Devices/Storage/DevATA.cpp | 12 + src/VBox/Devices/Storage/DevBusLogic.cpp | 497 +- src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp | 42 +- src/VBox/Devices/Storage/VHDHDDCore.cpp | 24 +- src/VBox/Frontends/VBoxFB/VBoxFB.cpp | 2 +- src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp | 7 +- src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp | 5 +- .../Frontends/VBoxManage/VBoxManageSnapshot.cpp | 44 +- src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp | 212 +- src/VBox/Frontends/VBoxShell/vboxinfo.vbs | 28 +- src/VBox/Frontends/VirtualBox/VBoxUI.pro | 1 + .../Frontends/VirtualBox/nls/ApprovedLanguages.kmk | 1 + .../Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts | 10786 +++++++++++++++++++ src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts | 56 +- src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts | 2 +- src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts | 120 +- src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts | 1189 +- src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts | 496 +- src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts | 112 +- src/VBox/Frontends/VirtualBox/nls/qt_ca_VA.ts | 5298 +++++++++ src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp | 3 +- .../Frontends/VirtualBox/src/VBoxConsoleView.cpp | 20 +- .../Frontends/VirtualBox/src/VBoxConsoleView.h | 1 + .../Frontends/VirtualBox/src/VBoxConsoleWnd.cpp | 25 +- src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.h | 3 + .../Frontends/VirtualBox/src/X11/VBoxX11Helper.cpp | 47 + .../Frontends/VirtualBox/src/X11/VBoxX11Helper.h | 1 + .../Frontends/VirtualBox/src/darwin/Info.plist | 2 +- .../VirtualBox/src/globals/VBoxGlobal.cpp | 22 +- .../Frontends/VirtualBox/src/globals/VBoxGlobal.h | 2 + src/VBox/Frontends/VirtualBox/src/main.cpp | 5 +- .../src/settings/global/VBoxGLSettingsLanguage.cpp | 3 +- src/VBox/GuestHost/OpenGL/Makefile.kmk | 20 + src/VBox/GuestHost/OpenGL/packer/pack_client.c | 2 +- .../GuestHost/OpenGL/state_tracker/state_glsl.c | 4 +- .../GuestHost/OpenGL/state_tracker/state_init.c | 3 + src/VBox/HostDrivers/Support/SUPDrvInternal.h | 6 +- src/VBox/HostDrivers/Support/SUPLibInternal.h | 8 + src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp | 21 +- .../HostDrivers/Support/solaris/SUPLib-solaris.cpp | 32 + src/VBox/HostDrivers/Support/win/VBoxDrv.inf | 46 +- .../HostDrivers/VBoxNetAdp/solaris/vboxnet.conf | 2 +- src/VBox/HostServices/SharedFolders/vbsf.cpp | 15 +- src/VBox/HostServices/SharedOpenGL/Makefile.kmk | 2 + .../SharedOpenGL/render/renderspu_cocoa.c | 10 + .../SharedOpenGL/render/renderspu_init.c | 2 +- src/VBox/Installer/linux/Makefile.kmk | 4 +- src/VBox/Installer/linux/vboxdrv.sh.in | 11 +- src/VBox/Installer/solaris/preremove.sh | 2 +- src/VBox/Installer/solaris/vboxconfig.sh | 31 +- src/VBox/Main/ApplianceImpl.cpp | 56 +- src/VBox/Main/ConsoleImpl.cpp | 35 +- src/VBox/Main/ConsoleImpl2.cpp | 32 +- src/VBox/Main/DisplayImpl.cpp | 5 +- src/VBox/Main/MachineDebuggerImpl.cpp | 6 +- src/VBox/Main/MachineImpl.cpp | 93 +- src/VBox/Main/Makefile.kmk | 4 +- src/VBox/Main/MediumAttachmentImpl.cpp | 2 +- src/VBox/Main/MediumImpl.cpp | 21 +- src/VBox/Main/NetworkAdapterImpl.cpp | 2 - src/VBox/Main/SnapshotImpl.cpp | 18 +- src/VBox/Main/USBControllerImpl.cpp | 4 +- src/VBox/Main/VMMDevInterface.cpp | 7 + src/VBox/Main/generic/OpenGLTestApp.cpp | 8 +- src/VBox/Main/include/ConsoleImpl.h | 28 +- src/VBox/Main/webservice/vboxweb.cpp | 8 +- src/VBox/Main/xml/Settings.cpp | 9 +- src/VBox/Main/xpcom/server.cpp | 4 +- src/VBox/Makefile.kmk | 2 +- src/VBox/RDP/client/rdesktop.c | 6 +- src/VBox/Runtime/VBox/log-vbox.cpp | 47 +- src/VBox/Runtime/common/checksum/RTSha1Digest.cpp | 2 +- src/VBox/Runtime/common/misc/tar.cpp | 2 +- src/VBox/Runtime/generic/RTFileReadAll-generic.cpp | 2 +- src/VBox/Runtime/include/internal/iprt.h | 4 +- src/VBox/Runtime/r0drv/linux/the-linux-kernel.h | 8 +- .../r3/freebsd/rtProcInitExePath-freebsd.cpp | 33 + src/VBox/Runtime/r3/linux/semevent-linux.cpp | 8 +- src/VBox/Runtime/r3/linux/semeventmulti-linux.cpp | 8 +- src/VBox/Runtime/r3/linux/semmutex-linux.cpp | 8 +- src/VBox/Runtime/r3/posix/semeventmulti-posix.cpp | 1 - src/VBox/VMM/CPUM.cpp | 65 +- src/VBox/VMM/CPUMInternal.h | 5 +- src/VBox/VMM/CPUMInternal.mac | 5 +- src/VBox/VMM/EM.cpp | 78 +- src/VBox/VMM/EMHandleRCTmpl.h | 10 + src/VBox/VMM/EMInternal.h | 2 - src/VBox/VMM/HWACCM.cpp | 43 +- src/VBox/VMM/HWACCMInternal.h | 9 +- src/VBox/VMM/PATM/PATM.cpp | 43 + src/VBox/VMM/PATM/PATMSSM.cpp | 16 +- src/VBox/VMM/PGM.cpp | 56 +- src/VBox/VMM/PGMInternal.h | 57 +- src/VBox/VMM/PGMMap.cpp | 246 +- src/VBox/VMM/PGMPhys.cpp | 2 +- src/VBox/VMM/PGMPool.cpp | 9 +- src/VBox/VMM/PGMSavedState.cpp | 138 +- src/VBox/VMM/VM.cpp | 2 +- src/VBox/VMM/VMM.cpp | 1 + src/VBox/VMM/VMMAll/PGMAll.cpp | 29 +- src/VBox/VMM/VMMAll/PGMAllBth.h | 42 +- src/VBox/VMM/VMMAll/PGMAllMap.cpp | 37 +- src/VBox/VMM/VMMAll/PGMAllPhys.cpp | 2 +- src/VBox/VMM/VMMAll/PGMAllPool.cpp | 9 + src/VBox/VMM/VMMAll/REMAll.cpp | 1 + src/VBox/VMM/VMMInternal.h | 1 + src/VBox/VMM/VMMR0/HWACCMR0.cpp | 19 +- src/VBox/VMM/VMMR0/HWSVMR0.cpp | 96 +- src/VBox/VMM/VMMR0/HWVMXR0.cpp | 65 +- src/VBox/VMM/VMMR0/VMMR0.cpp | 20 +- src/VBox/VMM/testcase/tstVMStructGC.cpp | 2 + src/libs/xpcom18a4/xpcom/threads/plevent.c | 7 + src/recompiler/target-i386/op_helper.c | 8 + 231 files changed, 25253 insertions(+), 2739 deletions(-) delete mode 100644 src/VBox/Additions/x11/vboxmouse/Imakefile delete mode 100644 src/VBox/Additions/x11/vboxvideo/Imakefile create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/IndustryStandard/PeImage.h create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/Library/PeCoffLib.h create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxDebugLib.h create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxMemLayout.h create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxPkg.h create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxLogo/VBoxLogo.inf create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/Makefile create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/efi-app/Readme.txt create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dec create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dsc create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.fdf create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkgX64.dsc create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c create mode 100644 src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf create mode 100644 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts create mode 100644 src/VBox/Frontends/VirtualBox/nls/qt_ca_VA.ts diff --git a/Config.kmk b/Config.kmk index c55a64687..8297af151 100644 --- a/Config.kmk +++ b/Config.kmk @@ -154,7 +154,7 @@ VBOX_VERSION_MINOR = 1 # This is the current build number. It should be increased every time we publish a # new build. The define is available in every source file. Only even build numbers # will be published, odd numbers are set during development. -VBOX_VERSION_BUILD = 2 +VBOX_VERSION_BUILD = 4 # Full version string (may include more than just x.y.z, but no spaces or other problematic chars). VBOX_VERSION_STRING = $(VBOX_VERSION_MAJOR).$(VBOX_VERSION_MINOR).$(VBOX_VERSION_BUILD) # Force the additions.sh script to get an exact additions build when we're doing the release. @@ -164,6 +164,11 @@ ifeq ($(int-mod $(VBOX_VERSION_BUILD),2),0) export VBOX_DOCUMENTATION_SH_MODE = release endif +# Some info on the vendor +VBOX_VENDOR = Sun Microsystems, Inc. +VBOX_PRODUCT = Sun VirtualBox +# maybe we want set this manually +VBOX_C_YEAR = $(date-utc %Y) # # The VirtualBox package type. @@ -806,6 +811,7 @@ ifdef VBOX_HEADLESS VBOX_WITH_VBOXBFE= VBOX_WITH_OGL= VBOX_WITH_KCHMVIEWER= + VBOX_WITH_VRDP_RDESKTOP= endif # @@ -1608,6 +1614,18 @@ ifdef VBOX_WITH_CROGL VBOX_LIB_OGL_HOSTCRUTIL = $(PATH_BIN)/VBoxOGLhostcrutil$(VBOX_SUFF_DLL) endif + if1of ($(KBUILD_TARGET),linux solaris) + # VBOX_PATH_MESA_SOURCE = $(PATH_ROOT)/src/libs/mesa-7.2 + VBOX_PATH_MESA_SOURCE = $(VBOX_PATH_X11_ROOT)/mesa-7.2 + VBOX_MESA_INCS = \ + $(VBOX_PATH_MESA_SOURCE) \ + $(VBOX_PATH_MESA_SOURCE)/include \ + $(VBOX_PATH_MESA_SOURCE)/src/mesa/ \ + $(VBOX_PATH_MESA_SOURCE)/src/mesa/glapi \ + $(VBOX_PATH_MESA_SOURCE)/src/mesa/main \ + $(VBOX_PATH_MESA_SOURCE)/src/mesa/drivers/dri/common + endif + VBOX_DARWIN_OPENGL_INST = obj/VBoxOGL/GL/ VBOX_DARWIN_OPENGL_HEADERS = gl.h glu.h SDK_DARWIN-OPENGL = Workaround SDK for the darwin OpenGL include directorly layout layout. @@ -1981,14 +1999,14 @@ endif if1of ($(KBUILD_TARGET), linux) ifeq ($(origin VBOX_LINUX_SRC),undefined) ifneq ($(wildcard /lib/modules/$(shell uname -r)/build/include/linux/autoconf.h),) - export VBOX_LINUX_SRC := /lib/modules/$(shell uname -r)/build + export VBOX_LINUX_SRC := /lib/modules/$(shell uname -r)/build else - export VBOX_LINUX_SRC := /usr/src/linux + export VBOX_LINUX_SRC := /usr/src/linux endif endif ifneq ($(VBOX_LINUX_SRC),) ifeq ($(origin VBOX_LINUX_INCS),undefined) - export VBOX_LINUX_INCS := $(VBOX_LINUX_SRC)/include + export VBOX_LINUX_INCS := $(VBOX_LINUX_SRC)/include # XXX hack alert! support splitted Linux kernels (make O=) # XXX put this crap elsewhere kernelpath := $(shell $(SED_EXT) -ne 's+^KERNELSRC.*= *\(.*\)+\1+p' $(VBOX_LINUX_SRC)/Makefile) @@ -2004,17 +2022,26 @@ if1of ($(KBUILD_TARGET), linux) endif endif ifneq ($(kernelpath),) - VBOX_LINUX_INCS += $(VBOX_LINUX_SRC)/include2 $(kernelpath)/include + VBOX_LINUX_INCS += $(VBOX_LINUX_SRC)/include2 $(kernelpath)/include else kernelpath := $(VBOX_LINUX_SRC) endif - VBOX_LINUX_INCS += $(kernelpath)/include/asm-i386/mach-default \ - $(kernelpath)/include/asm-x86/mach-default \ - $(kernelpath)/arch/x86/include \ - $(kernelpath)/arch/x86/include/asm/mach-default \ - $(kernelpath)/include + VBOX_LINUX_INCS += $(kernelpath)/include/asm-i386/mach-default \ + $(kernelpath)/include/asm-x86/mach-default \ + $(kernelpath)/arch/x86/include \ + $(kernelpath)/arch/x86/include/asm/mach-default \ + $(kernelpath)/include endif endif + # Since Linux 2.6.15, is included like this. It cannot hurt to do the + # same for older Linux kernels + ifneq ($(wildcard $(VBOX_LINUX_SRC)/include/linux/autoconf.h),) + # Linux < 2.6.33 + export VBOX_LINUX_INCLUDE := -include $(VBOX_LINUX_SRC)/include/linux/autoconf.h + else ifneq ($(wildcard $(VBOX_LINUX_SRC)/include/generated/autoconf.h),) + # Linux >= 2.6.33 + export VBOX_LINUX_INCLUDE := -include $(VBOX_LINUX_SRC)/include/generated/autoconf.h + endif endif # @@ -2273,7 +2300,7 @@ ifeq ($(KBUILD_TARGET),linux) TEMPLATE_VBOXR0DRV_TOOL = $(VBOX_GCC_TOOL) TEMPLATE_VBOXR0DRV_DEFS = __KERNEL__ MODULE IN_RING0 IN_RT_R0 TEMPLATE_VBOXR0DRV_INCS = $(VBOX_LINUX_INCS) -TEMPLATE_VBOXR0DRV_CFLAGS = -nostdinc -iwithprefix include \ +TEMPLATE_VBOXR0DRV_CFLAGS = -nostdinc -iwithprefix include $(VBOX_LINUX_INCLUDE) \ $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mpreferred-stack-boundary=2 -msoft-float @@ -3781,7 +3808,8 @@ VBOX_LIB_VBGL_R0 = $(VBOX_PATH_ADDITIONS_LIB)/VBoxGuestR0Lib$(VB # only way to get a really consistent build is to run 'kmk' in the top-level # directory. If you don't run it there, you get a consistent sub-tree only. # -VBOX_VERSION_STAMP = $(PATH_OUT)/version-stamp-$(VBOX_VERSION_STRING) +VBOX_BAD_CHAR_SET = ,;:/\$(SP)$(TAB)$(HASH)=![]@%&''()*""<>?^{}|~ +VBOX_VERSION_STAMP = $(PATH_OUT)/version-stamp-$(translate $(VBOX_VERSION_STRING)-$(VBOX_C_YEAR)-$(VBOX_VENDOR)-$(VBOX_PRODUCT),$(VBOX_BAD_CHAR_SET),,_) VBOX_VERSION_HEADER = $(PATH_OUT)/version-generated.h VBOX_VERSION_MK = $(PATH_OUT)/version-generated.mk @@ -3821,6 +3849,22 @@ $(VBOX_PACKAGE_HEADER): $(QUIET)$(APPEND) $@.tmp '#endif' $(QUIET)$(MV) -f $@.tmp $@ +VBOX_PRODUCT_HEADER = $(PATH_OUT)/product-generated.h + +$(VBOX_PRODUCT_HEADER): $(VBOX_VERSION_STAMP) + $(call MSG_GENERATE,,$@) + $(QUIET)$(MKDIR) -p $(@D) + $(QUIET)$(RM) -f $@ $@.tmp + $(QUIET)$(APPEND) $@.tmp '#ifndef ___product_generated_h___' + $(QUIET)$(APPEND) $@.tmp '#define ___product_generated_h___' + $(QUIET)$(APPEND) $@.tmp '' + $(QUIET)$(APPEND) $@.tmp '#define VBOX_VENDOR "$(VBOX_VENDOR)"' + $(QUIET)$(APPEND) $@.tmp '#define VBOX_PRODUCT "$(VBOX_PRODUCT)"' + $(QUIET)$(APPEND) $@.tmp '#define VBOX_C_YEAR "$(VBOX_C_YEAR)"' + $(QUIET)$(APPEND) $@.tmp '' + $(QUIET)$(APPEND) $@.tmp '#endif' + $(QUIET)$(MV) -f $@.tmp $@ + # # Used for external makefiles which cannot include Config.kmk # @@ -3832,6 +3876,9 @@ $(VBOX_VERSION_MK): $(VBOX_VERSION_STAMP) $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_MINOR = $(VBOX_VERSION_MINOR)' $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_BUILD = $(VBOX_VERSION_BUILD)' $(QUIET)$(APPEND) $@.tmp 'VBOX_VERSION_STRING = $(VBOX_VERSION_STRING)' + $(QUIET)$(APPEND) $@.tmp 'VBOX_VENDOR = $(VBOX_VENDOR)' + $(QUIET)$(APPEND) $@.tmp 'VBOX_PRODUCT = $(VBOX_PRODUCT)' + $(QUIET)$(APPEND) $@.tmp 'VBOX_C_YEAR = $(VBOX_C_YEAR)' $(QUIET)$(MV) -f $@.tmp $@ if !defined(VBOX_OSE) && !defined(VBOX_NOINC_LICENSE_VER_KMK) @@ -3860,7 +3907,7 @@ ifndef VBOX_NOINC_MISC # Force building of the version header file as the first thing anywhere in # the tree. This eliminates the need for manual dependencies on it. ## @todo there gotta be a better way of doing this. -Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PACKAGE_HEADER) +Makefile.kmk: | $(VBOX_VERSION_HEADER) $(VBOX_VERSION_MK) $(VBOX_PRODUCT_HEADER) $(VBOX_PACKAGE_HEADER) endif @@ -3874,7 +3921,7 @@ endif SVN ?= svn$(HOSTSUFF_EXE) VBOX_SVN_REV_KMK = $(PATH_OUT)/revision.kmk ifndef VBOX_SVN_REV - VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 56127 $ ) + VBOX_SVN_REV_FALLBACK := $(patsubst %:,, $Rev: 57640 $ ) VBOX_SVN_DEP := $(wildcard $(PATH_ROOT)/.svn/entries) ifeq ($(which $(SVN)),) VBOX_SVN_DEP := diff --git a/Makefile.kmk b/Makefile.kmk index 8a87b5e3a..18be3d9c6 100644 --- a/Makefile.kmk +++ b/Makefile.kmk @@ -754,10 +754,10 @@ additions-build-solaris.x86: additions-build-solaris.amd64 + $(VBOX_KMK_TIME) $(KMK) $(VBOX_ADDITIONS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 packing else -additions-build-solaris.rsync-into-vm: +additions-build-solaris.rsync-into-vm: $(VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST) $(VBOX_KMK_TIME) rsync -a --delete --delete-excluded --exclude .svn --exclude FetchDir --exclude tinderclient.log --exclude win.amd64 --exclude win.x86 . 192.168.27.4:/mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) -additions-build-solaris.build-it: $(VBOX_ADDITIONS_BUILD_WIN_HOST_FIRST) +additions-build-solaris.build-it: additions-build-solaris.rsync-into-vm $(call MSG_L1,Building Solaris/amd64 additions) $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_ADDITIONS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_ADDITIONS_BUILD.amd64) all packing" $(call MSG_L1,Building Solaris/x86 additions) diff --git a/configure b/configure index 2430c3537..2a29643ea 100755 --- a/configure +++ b/configure @@ -612,7 +612,7 @@ check_mkisofs() # -# Check for libxml2, needed by VBoxSettings +# Check for libxml2, needed by VBoxSettings and Runtime. # 2.6.24 is known to NOT work, 2.6.26 is known to work (there is no 2.6.25 release) # check_libxml2() @@ -2114,6 +2114,9 @@ for option in $*; do --disable-pulse) [ $WITH_PULSE -eq 1 ] && WITH_PULSE=0 ;; + --enable-pulse) + WITH_PULSE=2 + ;; --disable-dbus) [ $WITH_DBUS -eq 1 ] && WITH_DBUS=0 ;; @@ -2297,7 +2300,7 @@ check_gcc # the libraries [ "$OS" != "darwin" ] && check_pthread -[ $WITH_XPCOM -eq 1 ] && check_libxml2 +check_libxml2 [ $WITH_XPCOM -eq 1 ] && check_libxslt [ $WITH_LIBIDL -eq 1 ] && check_libidl check_ssl @@ -2334,7 +2337,7 @@ if [ "$OS" = "linux" ]; then fi if [ $WITH_PULSE -eq 1 ]; then check_pulse - else + elif [ $WITH_PULSE -eq 0 ]; then cnf_append "VBOX_WITH_PULSE" "" fi if [ $WITH_DBUS -eq 0 ]; then diff --git a/configure.vbs b/configure.vbs index 2da4f21c1..dbba81be2 100644 --- a/configure.vbs +++ b/configure.vbs @@ -9,20 +9,20 @@ ' ' -' Copyright (C) 2006-2007 Sun Microsystems, Inc. -' -' 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. -' -' Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa -' Clara, CA 95054 USA or visit http://www.sun.com if you need -' additional information or have any questions. -' +' Copyright (C) 2006-2007 Sun Microsystems, Inc. +' +' 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. +' +' Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +' Clara, CA 95054 USA or visit http://www.sun.com if you need +' additional information or have any questions. +' '***************************************************************************** diff --git a/include/VBox/cpum.h b/include/VBox/cpum.h index 050448101..0dce5b896 100644 --- a/include/VBox/cpum.h +++ b/include/VBox/cpum.h @@ -978,11 +978,11 @@ VMMR3DECL(int) CPUMR3Term(PVM pVM); VMMR3DECL(int) CPUMR3TermCPU(PVM pVM); VMMR3DECL(void) CPUMR3Reset(PVM pVM); VMMR3DECL(void) CPUMR3ResetCpu(PVMCPU pVCpu); +VMMDECL(bool) CPUMR3IsStateRestorePending(PVM pVM); # ifdef DEBUG VMMR3DECL(void) CPUMR3SaveEntryCtx(PVM pVM); # endif VMMR3DECL(int) CPUMR3SetCR4Feature(PVM pVM, RTHCUINTREG fOr, RTHCUINTREG fAnd); - VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdStdRCPtr(PVM pVM); VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdExtRCPtr(PVM pVM); VMMR3DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdCentaurRCPtr(PVM pVM); diff --git a/include/VBox/err.h b/include/VBox/err.h index 011b0b944..7314dbe0d 100644 --- a/include/VBox/err.h +++ b/include/VBox/err.h @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 2006-2007 Sun Microsystems, Inc. + * Copyright (C) 2006-2009 Sun Microsystems, Inc. * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -464,6 +464,8 @@ #define VERR_PGM_HANDLER_ALREADY_ALIASED (-1643) /** Already aliased to the same page. */ #define VINF_PGM_HANDLER_ALREADY_ALIASED (1643) +/** PGM pool flush pending - return to ring 3. */ +#define VINF_PGM_POOL_FLUSH_PENDING (1644) /** @} */ @@ -560,7 +562,7 @@ #define VERR_SSM_IDE_ASYNC_TIMEOUT (-1846) /** One of the structure magics was wrong. */ #define VERR_SSM_STRUCTURE_MAGIC (-1847) -/** The data in the saved state doesn't confirm to expectations. */ +/** The data in the saved state doesn't conform to expectations. */ #define VERR_SSM_UNEXPECTED_DATA (-1848) /** Trying to read a 64-bit guest physical address into a 32-bit variable. */ #define VERR_SSM_GCPHYS_OVERFLOW (-1849) @@ -1491,6 +1493,13 @@ #define VERR_COM_OBJECT_IN_USE (-4612) /** @} */ +/** @name VBox CPU hotplug Status codes + * @{ + */ +/** CPU hotplug events from VMMDev are not monitored by the guest */ +#define VERR_CPU_HOTPLUG_NOT_MONITORED_BY_GUEST (-4700) +/** @} */ + /* SED-END */ diff --git a/include/VBox/pgm.h b/include/VBox/pgm.h index 455cb65b4..67bbebc74 100644 --- a/include/VBox/pgm.h +++ b/include/VBox/pgm.h @@ -305,7 +305,6 @@ VMMDECL(int) PGMMapSetPage(PVM pVM, RTGCPTR GCPtr, uint64_t cb, uint64_t VMMDECL(int) PGMMapModifyPage(PVM pVM, RTGCPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask); #ifndef IN_RING0 VMMDECL(bool) PGMMapHasConflicts(PVM pVM); -VMMDECL(int) PGMMapResolveConflicts(PVM pVM); #endif #ifdef VBOX_STRICT VMMDECL(void) PGMMapCheck(PVM pVM); @@ -486,10 +485,11 @@ VMMDECL(void) PGMR3PhysSetA20(PVMCPU pVCpu, bool fEnable); VMMR3DECL(int) PGMR3MapPT(PVM pVM, RTGCPTR GCPtr, uint32_t cb, uint32_t fFlags, PFNPGMRELOCATE pfnRelocate, void *pvUser, const char *pszDesc); VMMR3DECL(int) PGMR3UnmapPT(PVM pVM, RTGCPTR GCPtr); VMMR3DECL(int) PGMR3FinalizeMappings(PVM pVM); +VMMR3DECL(int) PGMR3MappingsDisable(PVM pVM); VMMR3DECL(int) PGMR3MappingsSize(PVM pVM, uint32_t *pcb); VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb); VMMR3DECL(int) PGMR3MappingsUnfix(PVM pVM); -VMMR3DECL(int) PGMR3MappingsDisable(PVM pVM); +VMMR3DECL(bool) PGMR3MappingsNeedReFixing(PVM pVM); VMMR3DECL(int) PGMR3MapIntermediate(PVM pVM, RTUINTPTR Addr, RTHCPHYS HCPhys, unsigned cbPages); VMMR3DECL(int) PGMR3MapRead(PVM pVM, void *pvDst, RTGCPTR GCPtrSrc, size_t cb); diff --git a/include/VBox/version.h b/include/VBox/version.h index 57ba57197..70ed8e2d1 100644 --- a/include/VBox/version.h +++ b/include/VBox/version.h @@ -30,6 +30,9 @@ #ifndef ___VBox_version_h #define ___VBox_version_h +/** Product info */ +#include + #ifndef RC_INVOKED # include @@ -69,9 +72,6 @@ #endif /* !RC_INVOKED */ -/** Vendor name */ -#define VBOX_VENDOR "Sun Microsystems, Inc." - /** @name Prefined strings for Windows resource files * * @remarks The VBOX_VERSION_*_NR define are integer numbers while diff --git a/include/VBox/vm.h b/include/VBox/vm.h index 9b67f1a7f..fbee2c008 100644 --- a/include/VBox/vm.h +++ b/include/VBox/vm.h @@ -289,6 +289,10 @@ typedef struct VMCPU * Abandon all loops and code paths which can be resumed and get up to the EM * loops. */ #define VM_FF_PGM_NO_MEMORY RT_BIT_32(19) + /** PGM is about to perform a lightweight pool flush + * Guest SMP: all EMT threads should return to ring 3 + */ +#define VM_FF_PGM_POOL_FLUSH_PENDING RT_BIT_32(20) /** REM needs to be informed about handler changes. */ #define VM_FF_REM_HANDLER_NOTIFY RT_BIT_32(VM_FF_REM_HANDLER_NOTIFY_BIT) /** The bit number for VM_FF_REM_HANDLER_NOTIFY. */ diff --git a/include/iprt/cdefs.h b/include/iprt/cdefs.h index ad44141b1..87d521c71 100644 --- a/include/iprt/cdefs.h +++ b/include/iprt/cdefs.h @@ -1132,6 +1132,15 @@ */ #define RT_MIN(Value1, Value2) ( (Value1) <= (Value2) ? (Value1) : (Value2) ) +/** @def RT_CLAMP + * Clamps the value to minimum and maximum values. + * @returns The clamped value. + * @param Value The value to check. + * @param Min Minimum value. + * @param Max Maximum value. + */ +#define RT_CLAMP(Value, Min, Max) ( ((Value) > (Max)) ? (Max) : (((Value) < (Min)) ? (Min) : (Value)) ) + /** @def RT_ABS * Get the absolute (non-negative) value. * @returns The absolute value of Value. diff --git a/include/iprt/time.h b/include/iprt/time.h index 8f79cd883..1fef7fe85 100644 --- a/include/iprt/time.h +++ b/include/iprt/time.h @@ -354,7 +354,7 @@ DECLINLINE(struct timeval *) RTTimeSpecGetTimeval(PCRTTIMESPEC pTime, struct tim if (i32Micro < 0) { i32Micro += 1000000; - i64++; + i64--; } pTimeval->tv_sec = (time_t)i64; pTimeval->tv_usec = i32Micro; diff --git a/include/iprt/types.h b/include/iprt/types.h index cac3a983f..bdf561eba 100644 --- a/include/iprt/types.h +++ b/include/iprt/types.h @@ -97,7 +97,9 @@ # define true linux_true # define false linux_false # define uintptr_t linux_uintptr_t -# include +# ifndef AUTOCONF_INCLUDED +# include +# endif # include # include # undef uintptr_t diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c index 758251783..667441238 100644 --- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c +++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c @@ -185,7 +185,25 @@ static kmutex_t g_IrqMtx; int _init(void) { LogFlow((DEVICE_NAME ":_init\n")); - int rc = ddi_soft_state_init(&g_pVBoxGuestSolarisState, sizeof(vboxguest_state_t), 1); + + /* + * Prevent module autounloading. + */ + modctl_t *pModCtl = mod_getctl(&g_VBoxGuestSolarisModLinkage); + if (pModCtl) + pModCtl->mod_loadflags |= MOD_NOAUTOUNLOAD; + else + LogRel((DEVICE_NAME ":failed to disable autounloading!\n")); + + PRTLOGGER pRelLogger; + static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES; + int rc = RTLogCreate(&pRelLogger, 0 /* fFlags */, "all", + "VBOX_RELEASE_LOG", RT_ELEMENTS(s_apszGroups), s_apszGroups, + RTLOGDEST_STDOUT | RTLOGDEST_DEBUGGER, NULL); + if (RT_SUCCESS(rc)) + RTLogRelSetDefaultInstance(pRelLogger); + + rc = ddi_soft_state_init(&g_pVBoxGuestSolarisState, sizeof(vboxguest_state_t), 1); if (!rc) { rc = mod_install(&g_VBoxGuestSolarisModLinkage); @@ -202,6 +220,10 @@ int _fini(void) int rc = mod_remove(&g_VBoxGuestSolarisModLinkage); if (!rc) ddi_soft_state_fini(&g_pVBoxGuestSolarisState); + + RTLogDestroy(RTLogRelSetDefaultInstance(NULL)); + RTLogDestroy(RTLogSetDefaultInstance(NULL)); + return rc; } @@ -419,7 +441,7 @@ static int VBoxGuestSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void static int VBoxGuestSolarisOpen(dev_t *pDev, int fFlag, int fType, cred_t *pCred) { int rc; - PVBOXGUESTSESSION pSession; + PVBOXGUESTSESSION pSession = NULL; LogFlow((DEVICE_NAME "::Open\n")); @@ -471,7 +493,7 @@ static int VBoxGuestSolarisClose(dev_t Dev, int flag, int fType, cred_t *pCred) { LogFlow((DEVICE_NAME "::Close pid=%d\n", (int)RTProcSelf())); - PVBOXGUESTSESSION pSession; + PVBOXGUESTSESSION pSession = NULL; vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev)); if (!pState) { @@ -502,7 +524,6 @@ static int VBoxGuestSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred) { LogFlow((DEVICE_NAME "::Read\n")); - PVBOXGUESTSESSION pSession; vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev)); if (!pState) { @@ -510,6 +531,7 @@ static int VBoxGuestSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred) return EFAULT; } + PVBOXGUESTSESSION pSession = pState->pSession; uint32_t u32CurSeq = ASMAtomicUoReadU32(&g_DevExt.u32MousePosChangedSeq); if (pSession->u32MousePosChangedSeq != u32CurSeq) pSession->u32MousePosChangedSeq = u32CurSeq; @@ -556,14 +578,14 @@ static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cr vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev)); if (!pState) { - Log((DEVICE_NAME "::IOCtl: no state data for %d\n", getminor(Dev))); + LogRel((DEVICE_NAME "::IOCtl: no state data for %d\n", getminor(Dev))); return EINVAL; } PVBOXGUESTSESSION pSession = pState->pSession; if (!pSession) { - Log((DEVICE_NAME "::IOCtl: no session data for %d\n", getminor(Dev))); + LogRel((DEVICE_NAME "::IOCtl: no session data for %d\n", getminor(Dev))); return EINVAL; } @@ -580,19 +602,19 @@ static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cr int rc = ddi_copyin((void *)pArg, &ReqWrap, sizeof(ReqWrap), Mode); if (RT_UNLIKELY(rc)) { - LogRel((DEVICE_NAME "::IOCtl: ddi_copyin failed to read header pArg=%p Cmd=%d. rc=%d.\n", pArg, Cmd, rc)); + LogRel((DEVICE_NAME "::IOCtl: ddi_copyin failed to read header pArg=%p Cmd=%d. rc=%#x.\n", pArg, Cmd, rc)); return EINVAL; } if (ReqWrap.u32Magic != VBGLBIGREQ_MAGIC) { - LogRel((DEVICE_NAME "::IOCtl: bad magic %#x; pArg=%p Cmd=%d.\n", ReqWrap.u32Magic, pArg, Cmd)); + LogRel((DEVICE_NAME "::IOCtl: bad magic %#x; pArg=%p Cmd=%#x.\n", ReqWrap.u32Magic, pArg, Cmd)); return EINVAL; } if (RT_UNLIKELY( ReqWrap.cbData == 0 || ReqWrap.cbData > _1M*16)) { - Log((DEVICE_NAME "::IOCtl: bad size %#x; pArg=%p Cmd=%d.\n", ReqWrap.cbData, pArg, Cmd)); + LogRel((DEVICE_NAME "::IOCtl: bad size %#x; pArg=%p Cmd=%#x.\n", ReqWrap.cbData, pArg, Cmd)); return EINVAL; } @@ -648,7 +670,10 @@ static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cr } else { - LogRel((DEVICE_NAME "::IOCtl: VBoxGuestCommonIOCtl failed. rc=%d\n", rc)); + if (rc != VERR_INTERRUPTED) + LogRel((DEVICE_NAME "::IOCtl: VBoxGuestCommonIOCtl failed. rc=%d\n", rc)); + else + Log((DEVICE_NAME "::IOCtl: VBoxGuestCommonIOCtl failed. rc=%d\n", rc)); rc = RTErrConvertToErrno(rc); } *pVal = rc; diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp index b0cc551c9..22947287f 100644 --- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp +++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp @@ -155,7 +155,7 @@ static int vboxGuestInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt) if (RT_SUCCESS(rc)) { pDevExt->hGuestMappings = hFictive != NIL_RTR0MEMOBJ ? hFictive : hObj; - LogRel(("VBoxGuest: %p LB %#x; uAlignment=%#x iTry=%u hGuestMappings=%p (%s)\n", + Log(("VBoxGuest: %p LB %#x; uAlignment=%#x iTry=%u hGuestMappings=%p (%s)\n", RTR0MemObjAddress(pDevExt->hGuestMappings), RTR0MemObjSize(pDevExt->hGuestMappings), uAlignment, iTry, pDevExt->hGuestMappings, hFictive != NIL_RTR0PTR ? "fictive" : "reservation")); @@ -1307,7 +1307,7 @@ static int VBoxGuestCommonIOCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, */ if (pInfo->cParms > 4096) /* (Just make sure it doesn't overflow the next check.) */ { - Log(("VBoxGuestCommonIOCtl: HGCM_CALL: cParm=%RX32 is not sane\n", pInfo->cParms)); + LogRel(("VBoxGuestCommonIOCtl: HGCM_CALL: cParm=%RX32 is not sane\n", pInfo->cParms)); return VERR_INVALID_PARAMETER; } size_t cbActual = cbExtra + sizeof(*pInfo); @@ -1319,7 +1319,7 @@ static int VBoxGuestCommonIOCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, cbActual += pInfo->cParms * sizeof(HGCMFunctionParameter); if (cbData < cbActual) { - Log(("VBoxGuestCommonIOCtl: HGCM_CALL: cbData=%#zx (%zu) required size is %#zx (%zu)\n", + LogRel(("VBoxGuestCommonIOCtl: HGCM_CALL: cbData=%#zx (%zu) required size is %#zx (%zu)\n", cbData, cbActual)); return VERR_INVALID_PARAMETER; } @@ -1375,7 +1375,12 @@ static int VBoxGuestCommonIOCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, *pcbDataReturned = cbActual; } else - Log(("VBoxGuestCommonIOCtl: HGCM_CALL: Failed. rc=%Rrc.\n", rc)); + { + if (rc != VERR_INTERRUPTED) + LogRel(("VBoxGuestCommonIOCtl: HGCM_CALL: %s Failed. rc=%Rrc.\n", f32bit ? "32" : "64", rc)); + else + Log(("VBoxGuestCommonIOCtl: HGCM_CALL: %s Failed. rc=%Rrc.\n", f32bit ? "32" : "64", rc)); + } return rc; } @@ -1497,7 +1502,7 @@ int VBoxGuestCommonIOCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUES do { \ if (pSession->R0Process != NIL_RTR0PROCESS) \ { \ - Log(("VBoxGuestCommonIOCtl: " mnemonic ": Ring-0 only, caller is %RTproc/%p\n", \ + LogRel(("VBoxGuestCommonIOCtl: " mnemonic ": Ring-0 only, caller is %RTproc/%p\n", \ pSession->Process, (uintptr_t)pSession->R0Process)); \ return VERR_PERMISSION_DENIED; \ } \ @@ -1506,13 +1511,13 @@ int VBoxGuestCommonIOCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUES do { \ if (cbData < (cbMin)) \ { \ - Log(("VBoxGuestCommonIOCtl: " mnemonic ": cbData=%#zx (%zu) min is %#zx (%zu)\n", \ + LogRel(("VBoxGuestCommonIOCtl: " mnemonic ": cbData=%#zx (%zu) min is %#zx (%zu)\n", \ cbData, cbData, (size_t)(cbMin), (size_t)(cbMin))); \ return VERR_BUFFER_OVERFLOW; \ } \ if ((cbMin) != 0 && !VALID_PTR(pvData)) \ { \ - Log(("VBoxGuestCommonIOCtl: " mnemonic ": Invalid pointer %p\n", pvData)); \ + LogRel(("VBoxGuestCommonIOCtl: " mnemonic ": Invalid pointer %p\n", pvData)); \ return VERR_INVALID_POINTER; \ } \ } while (0) @@ -1625,7 +1630,7 @@ int VBoxGuestCommonIOCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUES default: { - Log(("VBoxGuestCommonIOCtl: Unknown request iFunction=%#x Stripped size=%#x\n", iFunction, + LogRel(("VBoxGuestCommonIOCtl: Unknown request iFunction=%#x Stripped size=%#x\n", iFunction, VBOXGUEST_IOCTL_STRIP_SIZE(iFunction))); rc = VERR_NOT_SUPPORTED; break; diff --git a/src/VBox/Additions/common/VBoxGuest/linux/Makefile b/src/VBox/Additions/common/VBoxGuest/linux/Makefile index 4ad857fa9..660eaaf34 100644 --- a/src/VBox/Additions/common/VBoxGuest/linux/Makefile +++ b/src/VBox/Additions/common/VBoxGuest/linux/Makefile @@ -1,4 +1,4 @@ -# $Revision: 55459 $ +# $Revision: 57025 $ ## @file # VirtualBox Guest Additions Module Makefile. # @@ -233,6 +233,10 @@ ifeq ($(KERN_VERSION), 24) # 2.4 # +ifeq ($(BUILD_TARGET_ARCH),amd64) + KFLAGS += -mcmodel=kernel +endif + CFLAGS := -O2 -DVBOX_LINUX_2_4 -DEXPORT_SYMTAB $(INCL) $(KFLAGS) $(KDEBUG) MODULE_EXT := o diff --git a/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp b/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp index 4d565b80f..74de45480 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp @@ -1,4 +1,4 @@ -/* $Revision: 53721 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - Generic VMMDev request management. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp b/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp index 9ae7cc931..f78da8a14 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp @@ -1,4 +1,4 @@ -/* $Revision: 49879 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLib - Host-Guest Communication Manager. * @@ -17,6 +17,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp b/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp index ae56c16c8..f0799f67c 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp @@ -1,4 +1,4 @@ -/* $Revision: 53284 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLib - Host-Guest Communication Manager internal functions, implemented by VBoxGuest */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. @@ -894,11 +903,18 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall(VBoxGuestHGCMCallInfo *pCallInfo, uint32_ */ rc = vbglR0HGCMInternalCopyBackResult(pCallInfo, pHGCMCall, &ParmInfo, fIsUser, rc); } + else + { + if (rc != VERR_INTERRUPTED) + LogRel(("VbglR0HGCMInternalCall: vbglR0HGCMInternalDoCall failed. rc=%Rrc\n", rc)); + } if (!fLeakIt) VbglGRFree(&pHGCMCall->header.header); } } + else + LogRel(("VbglR0HGCMInternalCall: vbglR0HGCMInternalPreprocessCall failed. rc=%Rrc\n", rc)); /* * Release locks and free bounce buffers. @@ -920,12 +936,12 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall(VBoxGuestHGCMCallInfo *pCallInfo, uint32_ DECLR0VBGL(int) VbglR0HGCMInternalCall32(VBoxGuestHGCMCallInfo *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags, PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData) { - VBoxGuestHGCMCallInfo *pCallInfo64; - HGCMFunctionParameter *pParm64; - HGCMFunctionParameter32 *pParm32; - uint32_t cParms; - uint32_t iParm; - int rc; + VBoxGuestHGCMCallInfo *pCallInfo64 = NULL; + HGCMFunctionParameter *pParm64 = NULL; + HGCMFunctionParameter32 *pParm32 = NULL; + uint32_t cParms = 0; + uint32_t iParm = 0; + int rc = VINF_SUCCESS; /* * Input validation. @@ -939,7 +955,11 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall32(VBoxGuestHGCMCallInfo *pCallInfo, uint3 AssertReturn( cbCallInfo >= sizeof(VBoxGuestHGCMCallInfo) || cbCallInfo >= pCallInfo->cParms * sizeof(HGCMFunctionParameter32), VERR_INVALID_PARAMETER); - AssertReturn((fFlags & VBGLR0_HGCMCALL_F_MODE_MASK) == VBGLR0_HGCMCALL_F_KERNEL, VERR_INVALID_PARAMETER); + + /* This Assert does not work on Solaris 64/32 mixed mode, not sure why, skipping for now */ +#ifndef RT_OS_SOLARIS + AssertReturn((fFlags & VBGLR0_HGCMCALL_F_MODE_MASK) == VBGLR0_HGCMCALL_F_KERNEL, VERR_WRONG_ORDER); +#endif cParms = pCallInfo->cParms; Log(("VbglR0HGCMInternalCall32: cParms=%d, u32Function=%d, fFlags=%#x\n", cParms, pCallInfo->u32Function, fFlags)); @@ -978,6 +998,7 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall32(VBoxGuestHGCMCallInfo *pCallInfo, uint3 default: rc = VERR_INVALID_PARAMETER; + LogRel(("VbglR0HGCMInternalCall32: pParm32 type %#x invalid.\n", pParm32->type)); break; } if (RT_FAILURE(rc)) @@ -988,34 +1009,46 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall32(VBoxGuestHGCMCallInfo *pCallInfo, uint3 rc = VbglR0HGCMInternalCall(pCallInfo64, sizeof(*pCallInfo64) + cParms * sizeof(HGCMFunctionParameter), fFlags, pfnAsyncCallback, pvAsyncData, u32AsyncData); - /* - * Copy back. - */ - for (iParm = 0; iParm < cParms; iParm++, pParm32++, pParm64++) + if (RT_SUCCESS(rc)) { - switch (pParm32->type) + *pCallInfo = *pCallInfo64; + + /* + * Copy back. + */ + pParm32 = VBOXGUEST_HGCM_CALL_PARMS32(pCallInfo); + pParm64 = VBOXGUEST_HGCM_CALL_PARMS(pCallInfo64); + for (iParm = 0; iParm < cParms; iParm++, pParm32++, pParm64++) { - case VMMDevHGCMParmType_32bit: - pParm32->u.value32 = pParm32->u.value32; - break; + switch (pParm64->type) + { + case VMMDevHGCMParmType_32bit: + LogRel(("pParm32->u.value32=%d\n", pParm32->u.value32)); + pParm32->u.value32 = pParm64->u.value32; + break; - case VMMDevHGCMParmType_64bit: - pParm32->u.value64 = pParm64->u.value64; - break; + case VMMDevHGCMParmType_64bit: + pParm32->u.value64 = pParm64->u.value64; + break; - case VMMDevHGCMParmType_LinAddr_Out: - case VMMDevHGCMParmType_LinAddr: - case VMMDevHGCMParmType_LinAddr_In: - pParm32->u.Pointer.size = pParm64->u.Pointer.size; - break; + case VMMDevHGCMParmType_LinAddr_Out: + case VMMDevHGCMParmType_LinAddr: + case VMMDevHGCMParmType_LinAddr_In: + pParm32->u.Pointer.size = pParm64->u.Pointer.size; + break; - default: - rc = VERR_INTERNAL_ERROR_3; - break; + default: + LogRel(("VbglR0HGCMInternalCall32: failed invalid pParm32 type %d\n", pParm32->type)); + rc = VERR_INTERNAL_ERROR_3; + break; + } } } - *pCallInfo = *pCallInfo64; + else + LogRel(("VbglR0HGCMInternalCall32: VbglR0HGCMInternalCall failed. rc=%Rrc\n", rc)); } + else + LogRel(("VbglR0HGCMInternalCall32: failed. rc=%Rrc\n", rc)); RTMemTmpFree(pCallInfo64); return rc; diff --git a/src/VBox/Additions/common/VBoxGuestLib/Init.cpp b/src/VBox/Additions/common/VBoxGuestLib/Init.cpp index c7876b912..8211e0548 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/Init.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/Init.cpp @@ -1,4 +1,4 @@ -/* $Revision: 54331 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - Library initialization. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk b/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk index 1f9216182..e703ffda1 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk +++ b/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk @@ -14,6 +14,15 @@ # 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. +# # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa # Clara, CA 95054 USA or visit http://www.sun.com if you need # additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp b/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp index be3644e53..0033f8d5b 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp @@ -1,4 +1,4 @@ -/* $Revision: 49522 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - Physical memory heap. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp index d122e96d8..254470f81 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp @@ -1,4 +1,4 @@ -/* $Revision: 54273 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - IDC with VBoxGuest and HGCM helpers. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h index 40501a56c..83caf58ec 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h +++ b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h @@ -1,4 +1,4 @@ -/* $Revision: 49791 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - System dependent helpers internal header. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h b/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h index ddd7828b5..9854ca948 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h +++ b/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h @@ -1,4 +1,4 @@ -/* $Revision: 49879 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - Internal header. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBGLR3Internal.h b/src/VBox/Additions/common/VBoxGuestLib/VBGLR3Internal.h index 055c85481..6f84e0c0f 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBGLR3Internal.h +++ b/src/VBox/Additions/common/VBoxGuestLib/VBGLR3Internal.h @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.c b/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.c index a854b8d90..0db764da4 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.c +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.c @@ -1,4 +1,4 @@ -/* $Revision: 49961 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - Central calls. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.h b/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.h index 492039a7e..77dc12236 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.h +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxCalls.h @@ -13,6 +13,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestLog.h b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestLog.h index a0b4b29fd..bcafb0ac8 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestLog.h +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestLog.h @@ -13,6 +13,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3Lib.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3Lib.cpp index a0e9a5624..4c1988a89 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3Lib.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3Lib.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp index b6198fc9f..b7ce42acb 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp index cb8d0a8c6..7129bf363 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDaemonize.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDaemonize.cpp index 5b3117d6e..1d57780e5 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDaemonize.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDaemonize.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGR.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGR.cpp index 1ab3aadeb..4073cec5d 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGR.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGR.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp index bd17881df..e35a60df4 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp index 67aa97c5b..2384e611a 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp index 2d5237433..db9c1cbc6 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp index 01b05e8dd..a7f3cee81 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSeamless.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSeamless.cpp index 90643a1e5..565d0e237 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSeamless.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSeamless.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibTime.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibTime.cpp index 7baf91ee7..aa6135ed2 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibTime.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibTime.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp index fb5b720af..45694acc9 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp b/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp index 40407187f..10bf6891f 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp @@ -13,6 +13,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxGuestLib/VbglR0CanUsePhysPageList.cpp b/src/VBox/Additions/common/VBoxGuestLib/VbglR0CanUsePhysPageList.cpp index b3795fab7..95836ef0c 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VbglR0CanUsePhysPageList.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VbglR0CanUsePhysPageList.cpp @@ -1,4 +1,4 @@ -/* $Revision: 49879 $ */ +/* $Revision: 57546 $ */ /** @file * VBoxGuestLibR0 - Physical memory heap. */ @@ -14,6 +14,15 @@ * 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. + * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 USA or visit http://www.sun.com if you need * additional information or have any questions. diff --git a/src/VBox/Additions/common/VBoxService/VBoxService.cpp b/src/VBox/Additions/common/VBoxService/VBoxService.cpp index 6fefcad54..b852af303 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxService.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxService.cpp @@ -30,14 +30,17 @@ #endif #include -#include -#include -#include -#include #include +#include +#include #include -#include +#include +#include +#include + #include +#include + #include "VBoxServiceInternal.h" @@ -549,7 +552,8 @@ int main(int argc, char **argv) if (iMain == ~0U) return VBoxServiceSyntax("At least one service must be enabled.\n"); - VBoxServiceVerbose(0, "Started. Verbose level = %d\n", g_cVerbosity); + VBoxServiceVerbose(0, "%s r%s started. Verbose level = %d\n", + RTBldCfgVersion(), RTBldCfgRevisionStr(), g_cVerbosity); /* * Daemonize if requested. diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceExec.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceExec.cpp index 7dae914bb..a902d47c7 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceExec.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceExec.cpp @@ -133,9 +133,9 @@ static int VBoxServiceExecValidateFlags(const char *pszFlags) */ static int VBoxServiceExecReadHostProp(const char *pszPropName, char **ppszValue, uint64_t *puTimestamp) { - char *pszFlags, *pszValue; + char *pszFlags; uint64_t uTimestamp; - int rc = VBoxServiceReadProp(g_uExecGuestPropSvcClientID, pszPropName, ppszValue, &pszFlags, puTimestamp); + int rc = VBoxServiceReadProp(g_uExecGuestPropSvcClientID, pszPropName, ppszValue, &pszFlags, &uTimestamp); if (RT_SUCCESS(rc)) { /* @@ -152,13 +152,7 @@ static int VBoxServiceExecReadHostProp(const char *pszPropName, char **ppszValue else { VBoxServiceVerbose(2, "Exec: Read \"%s\" = \"%s\", timestamp %RU64n\n", - pszPropName, pszValue, uTimestamp); - *ppszValue = RTStrDup(pszValue); - if (!*ppszValue) - { - VBoxServiceError("Exec: RTStrDup failed for \"%s\"\n", pszValue); - rc = VERR_NO_MEMORY; - } + pszPropName, *ppszValue, uTimestamp); if (puTimestamp) *puTimestamp = uTimestamp; } diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h b/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h index f7a53fa27..03ea2f0bf 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h @@ -26,6 +26,7 @@ #ifdef RT_OS_WINDOWS # include # include /* Needed for file version information. */ +# include /* Needed for process security information. */ #endif /** @@ -112,6 +113,12 @@ typedef struct char* pszFilePath; char* pszFileName; } VBOXSERVICEVMINFOFILE, *PVBOXSERVICEVMINFOFILE; +/** Structure for process information lookup. */ +typedef struct +{ + DWORD id; + LUID luid; +} VBOXSERVICEVMINFOPROC, *PVBOXSERVICEVMINFOPROC; /** Function prototypes for dynamic loading. */ typedef DWORD (WINAPI* fnWTSGetActiveConsoleSessionId)(); #endif @@ -148,13 +155,16 @@ extern int VBoxServiceWinUninstall(void); /** Reports our current status to the SCM. */ extern BOOL VBoxServiceWinSetStatus(DWORD dwStatus, DWORD dwCheckPoint); #ifdef VBOX_WITH_GUEST_PROPS +/** Determines the total count of processes attach to a logon session. */ +extern DWORD VBoxServiceVMInfoWinSessionGetProcessCount(PLUID pSession, + PVBOXSERVICEVMINFOPROC pProc, DWORD dwProcCount); /** Detects wheter a user is logged on based on the enumerated processes. */ -extern BOOL VBoxServiceVMInfoWinIsLoggedIn(VBOXSERVICEVMINFOUSER* a_pUserInfo, - PLUID a_pSession, - PLUID a_pLuid, - DWORD a_dwNumOfProcLUIDs); -/** Gets logon user IDs from enumerated processes. */ -extern DWORD VBoxServiceVMInfoWinGetLUIDsFromProcesses(PLUID *ppLuid); +extern BOOL VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER a_pUserInfo, + PLUID a_pSession); +/** Gets logon user IDs from enumerated processes. ppProc needs to be freed with VBoxServiceVMInfoWinProcessesFree() afterwards. */ +extern int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWORD *pdwCount); +/** Frees the process structure allocated by VBoxServiceVMInfoWinProcessesEnumerate() before. */ +extern void VBoxServiceVMInfoWinProcessesFree(PVBOXSERVICEVMINFOPROC pProc); #endif /* VBOX_WITH_GUEST_PROPS */ #endif /* RT_OS_WINDOWS */ diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp index 8e9721185..e90e3f2c4 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp @@ -587,6 +587,7 @@ DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown) } } + VBoxServiceTimeSyncCancelAdjust(); RTSemEventMultiDestroy(g_TimeSyncEvent); g_TimeSyncEvent = NIL_RTSEMEVENTMULTI; return rc; diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp index a3ab1ec5f..2e96e007b 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp @@ -137,8 +137,8 @@ int VBoxServiceReadPropUInt32(uint32_t u32ClientId, const char *pszPropName, uin if ( RT_SUCCESS(rc) && (*pu32 < u32Min || *pu32 > u32Max)) { - VBoxServiceError("The guest property value %s = %RU32 is out of range [%RU32..%RU32].\n", - pszPropName, *pu32, u32Min, u32Max); + rc = VBoxServiceError("The guest property value %s = %RU32 is out of range [%RU32..%RU32].\n", + pszPropName, *pu32, u32Min, u32Max); } RTStrFree(pszValue); } @@ -155,19 +155,23 @@ int VBoxServiceReadPropUInt32(uint32_t u32ClientId, const char *pszPropName, uin * @param u32ClientId The HGCM client ID for the guest property session. * @param pszName The property name. * @param pszValueFormat The property format string. If this is NULL then - * the property will be removed. + * the property will be deleted (if possible). * @param ... Format arguments. */ int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, ...) { + AssertPtr(pszName); int rc; if (pszValueFormat != NULL) { - /** @todo Log the value as well? just copy the guts of - * VbglR3GuestPropWriteValueV. */ - VBoxServiceVerbose(3, "Writing guest property \"%s\"\n", pszName); va_list va; va_start(va, pszValueFormat); + + char *pszValue = RTStrAPrintf2V(pszValueFormat, va); + AssertPtr(pszValue); + VBoxServiceVerbose(3, "Writing guest property \"%s\" = \"%s\"\n", pszName, pszValue); + RTStrFree(pszValue); + rc = VbglR3GuestPropWriteValueV(u32ClientId, pszName, pszValueFormat, va); va_end(va); if (RT_FAILURE(rc)) @@ -175,9 +179,10 @@ int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char } else { + VBoxServiceVerbose(3, "Deleting guest property \"%s\"\n", pszName); rc = VbglR3GuestPropWriteValue(u32ClientId, pszName, NULL); if (RT_FAILURE(rc)) - VBoxServiceError("Error removing guest property \"%s\" (rc=%Rrc)\n", pszName, rc); + VBoxServiceError("Error deleting guest property \"%s\" (rc=%Rrc)\n", pszName, rc); } return rc; } diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp index 2b4afdf82..39fbad2ee 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp @@ -24,7 +24,6 @@ * Header Files * *******************************************************************************/ #include -#include #include /* For WTS* calls. */ #include /* EnumProcesses. */ @@ -52,125 +51,202 @@ #ifndef TARGET_NT4 -/* Function GetLUIDsFromProcesses() written by Stefan Kuhr. */ -DWORD VBoxServiceVMInfoWinGetLUIDsFromProcesses(PLUID *ppLuid) +int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pProc, + TOKEN_INFORMATION_CLASS tkClass) { - DWORD dwSize, dwSize2, dwIndex ; - LPDWORD lpdwPIDs ; - DWORD dwLastError = ERROR_SUCCESS; + AssertPtr(pProc); + HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pProc->id); + if (h == NULL) + return RTErrConvertFromWin32(GetLastError()); + + HANDLE hToken; + int rc; + if (FALSE == OpenProcessToken(h, TOKEN_QUERY, &hToken)) + { + rc = RTErrConvertFromWin32(GetLastError()); + } + else + { + void *pvTokenInfo = NULL; + DWORD dwTokenInfoSize; + switch (tkClass) + { + case TokenStatistics: + dwTokenInfoSize = sizeof(TOKEN_STATISTICS); + pvTokenInfo = (TOKEN_STATISTICS*)RTMemAlloc(dwTokenInfoSize); + AssertPtr(pvTokenInfo); + break; + + /** @todo Implement more token classes here. */ + + default: + VBoxServiceError("Token class not implemented: %ld", tkClass); + rc = VERR_NOT_IMPLEMENTED; + break; + } + + if (pvTokenInfo) + { + DWORD dwRetLength; + if (FALSE == GetTokenInformation(hToken, tkClass, pvTokenInfo, dwTokenInfoSize, &dwRetLength)) + { + rc = RTErrConvertFromWin32(GetLastError()); + } + else + { + switch (tkClass) + { + case TokenStatistics: + { + TOKEN_STATISTICS *pStats = (TOKEN_STATISTICS*)pvTokenInfo; + AssertPtr(pStats); + pProc->luid = pStats->AuthenticationId; + /* @todo Add more information of TOKEN_STATISTICS as needed. */ + break; + } + + default: + /* Should never get here! */ + break; + } + rc = VINF_SUCCESS; + } + RTMemFree(pvTokenInfo); + } + CloseHandle(hToken); + } + CloseHandle(h); + return rc; +} - if (!ppLuid) - { - SetLastError(ERROR_INVALID_PARAMETER); - return 0L; - } +int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWORD *pdwCount) +{ + AssertPtr(ppProc); + AssertPtr(pdwCount); + + DWORD dwNumProcs = 128; /* Number of processes our array can hold */ + DWORD *pdwProcIDs = (DWORD*)RTMemAlloc(dwNumProcs * sizeof(DWORD)); + if (pdwProcIDs == NULL) + return VERR_NO_MEMORY; - /* Call the PSAPI function EnumProcesses to get all of the - ProcID's currently in the system. - NOTE: In the documentation, the third parameter of - EnumProcesses is named cbNeeded, which implies that you - can call the function once to find out how much space to - allocate for a buffer and again to fill the buffer. - This is not the case. The cbNeeded parameter returns - the number of PIDs returned, so if your buffer size is - zero cbNeeded returns zero. - NOTE: The "HeapAlloc" loop here ensures that we - actually allocate a buffer large enough for all the - PIDs in the system. */ - dwSize2 = 256 * sizeof(DWORD); - - lpdwPIDs = NULL; + int rc; + DWORD cbRet; /* Returned size in bytes */ do { - if (lpdwPIDs) + if (FALSE == EnumProcesses(pdwProcIDs, dwNumProcs * sizeof(DWORD), &cbRet)) { - HeapFree(GetProcessHeap(), 0, lpdwPIDs) ; - dwSize2 *= 2; + rc = RTErrConvertFromWin32(GetLastError()); + break; } - lpdwPIDs = (unsigned long *)HeapAlloc(GetProcessHeap(), 0, dwSize2); - if (lpdwPIDs == NULL) - return 0L; // Last error will be that of HeapAlloc - if (!EnumProcesses( lpdwPIDs, dwSize2, &dwSize)) + /* Was our array big enough? Or do we need more space? */ + if (cbRet >= dwNumProcs * sizeof(DWORD)) { - DWORD dw = GetLastError(); - HeapFree(GetProcessHeap(), 0, lpdwPIDs); - SetLastError(dw); - return 0L; + /* Apparently not, so try next bigger size */ + dwNumProcs += 128; + pdwProcIDs = (DWORD*)RTMemRealloc(pdwProcIDs, dwNumProcs * sizeof(DWORD)); + if (pdwProcIDs == NULL) + { + rc = VERR_NO_MEMORY; + break; + } } - } - while (dwSize == dwSize2); - - /* At this point we have an array of the PIDs at the - time of the last EnumProcesses invocation. We will - allocate an array of LUIDs passed back via the out - param ppLuid of exactly the number of PIDs. We will - only fill the first n values of this array, with n - being the number of unique LUIDs found in these PIDs. */ - - /* How many ProcIDs did we get? */ - dwSize /= sizeof(DWORD); - dwSize2 = 0L; /* Our return value of found luids. */ + else + { + rc = VINF_SUCCESS; + dwNumProcs = cbRet / sizeof(DWORD); /* Set the current, real size of the number of processes we retrieved */ + break; + } + } while(dwNumProcs < 32768); /* Should be enough; see: http://blogs.technet.com/markrussinovich/archive/2009/07/08/3261309.aspx */ - *ppLuid = (LUID *)LocalAlloc(LPTR, dwSize*sizeof(LUID)); - if (!(*ppLuid)) + if (RT_SUCCESS(rc)) { - dwLastError = GetLastError(); - goto CLEANUP; - } - for (dwIndex = 0; dwIndex < dwSize; dwIndex++) - { - (*ppLuid)[dwIndex].LowPart =0L; - (*ppLuid)[dwIndex].HighPart=0; + /* Allocate our process structure */ + *ppProc = (PVBOXSERVICEVMINFOPROC)RTMemAlloc(dwNumProcs * sizeof(VBOXSERVICEVMINFOPROC)); + if (ppProc == NULL) + rc = VERR_NO_MEMORY; - /* Open the process (if we can... security does not - permit every process in the system). */ - HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE, lpdwPIDs[dwIndex]); - if ( hProcess != NULL ) + if (RT_SUCCESS(rc)) { - HANDLE hAccessToken; - if (OpenProcessToken(hProcess, TOKEN_QUERY, &hAccessToken)) + /* We now have the PIDs, fill them into the struct and lookup their LUID's */ + PVBOXSERVICEVMINFOPROC pCur = *ppProc; + DWORD *pCurProcID = pdwProcIDs; + for (DWORD i=0; iid = *pCurProcID; + rc = VBoxServiceVMInfoWinProcessesGetTokenInfo(pCur, TokenStatistics); + if (RT_FAILURE(rc)) { - DWORD dwTmp = 0L; - BOOL bFound = FALSE; - for (;dwTmp process LUIDs. */ + PVBOXSERVICEVMINFOPROC pCur = pProc; + for (DWORD i=0; i %ld:%ld\n", + pCur->luid.HighPart, pCur->luid.LowPart, + pSessionData->LogonId.HighPart, pSessionData->LogonId.LowPart);*/ + if ( pCur->luid.HighPart == pSessionData->LogonId.HighPart + && pCur->luid.LowPart == pSessionData->LogonId.LowPart) + { + VBoxServiceVerbose(3, "Users: Session %ld:%ld has active processes\n", + pSessionData->LogonId.HighPart, pSessionData->LogonId.LowPart); + LsaFreeReturnBuffer(pSessionData); + return 1; + } + pCur++; + } + LsaFreeReturnBuffer(pSessionData); + return 0; } -BOOL VBoxServiceVMInfoWinIsLoggedIn(VBOXSERVICEVMINFOUSER* a_pUserInfo, - PLUID a_pSession, - PLUID a_pLuid, - DWORD a_dwNumOfProcLUIDs) +BOOL VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER a_pUserInfo, + PLUID a_pSession) { - BOOL bLoggedIn = FALSE; BOOL bFoundUser = FALSE; PSECURITY_LOGON_SESSION_DATA sessionData = NULL; NTSTATUS r = 0; @@ -180,7 +256,7 @@ BOOL VBoxServiceVMInfoWinIsLoggedIn(VBOXSERVICEVMINFOUSER* a_pUserInfo, if (!a_pSession) return FALSE; - r = LsaGetLogonSessionData (a_pSession, &sessionData); + r = LsaGetLogonSessionData(a_pSession, &sessionData); if (r != STATUS_SUCCESS) { VBoxServiceError("LsaGetLogonSessionData failed, LSA error %lu\n", LsaNtStatusToWinError(r)); @@ -198,7 +274,9 @@ BOOL VBoxServiceVMInfoWinIsLoggedIn(VBOXSERVICEVMINFOUSER* a_pUserInfo, } VBoxServiceVerbose(3, "Users: Session data: Name = %ls, Len = %d, SID = %s, LogonID = %d,%d\n", - (sessionData->UserName).Buffer, (sessionData->UserName).Length, (sessionData->Sid != NULL) ? "1" : "0", sessionData->LogonId.HighPart, sessionData->LogonId.LowPart); + (sessionData->UserName).Buffer, + (sessionData->UserName).Length, + (sessionData->Sid != NULL) ? "1" : "0", sessionData->LogonId.HighPart, sessionData->LogonId.LowPart); if ((sessionData->UserName.Buffer != NULL) && (sessionData->Sid != NULL) && @@ -207,35 +285,34 @@ BOOL VBoxServiceVMInfoWinIsLoggedIn(VBOXSERVICEVMINFOUSER* a_pUserInfo, /* Get the user name. */ usBuffer = (sessionData->UserName).Buffer; iLength = (sessionData->UserName).Length; - if (iLength > sizeof(a_pUserInfo->szUser) - sizeof(TCHAR)) /* -sizeof(TCHAR) because we have to add the terminating null char at the end later. */ + if (iLength > sizeof(a_pUserInfo->szUser) - sizeof(WCHAR)) /* -sizeof(WCHAR) because we have to add the terminating null char at the end later. */ { VBoxServiceVerbose(0, "User name too long (%d bytes) for buffer! Name will be truncated.\n", iLength); - iLength = sizeof(a_pUserInfo->szUser) - sizeof(TCHAR); + iLength = sizeof(a_pUserInfo->szUser) - sizeof(WCHAR); } wcsncpy (a_pUserInfo->szUser, usBuffer, iLength); - wcscat (a_pUserInfo->szUser, L""); /* Add terminating null char. */ /* Get authentication package. */ usBuffer = (sessionData->AuthenticationPackage).Buffer; iLength = (sessionData->AuthenticationPackage).Length; - if (iLength > sizeof(a_pUserInfo->szAuthenticationPackage) - sizeof(TCHAR)) /* -sizeof(TCHAR) because we have to add the terminating null char at the end later. */ + if (iLength > sizeof(a_pUserInfo->szAuthenticationPackage) - sizeof(WCHAR)) /* -sizeof(WCHAR) because we have to add the terminating null char at the end later. */ { VBoxServiceVerbose(0, "Authentication pkg name too long (%d bytes) for buffer! Name will be truncated.\n", iLength); - iLength = sizeof(a_pUserInfo->szAuthenticationPackage) - sizeof(TCHAR); + iLength = sizeof(a_pUserInfo->szAuthenticationPackage) - sizeof(WCHAR); } - wcsncpy (a_pUserInfo->szAuthenticationPackage, usBuffer, iLength); - wcscat (a_pUserInfo->szAuthenticationPackage, L""); /* Add terminating null char. */ + if (iLength) + wcsncpy (a_pUserInfo->szAuthenticationPackage, usBuffer, iLength); /* Get logon domain. */ usBuffer = (sessionData->LogonDomain).Buffer; iLength = (sessionData->LogonDomain).Length; - if (iLength > sizeof(a_pUserInfo->szLogonDomain) - sizeof(TCHAR)) /* -sizeof(TCHAR) because we have to add the terminating null char at the end later. */ + if (iLength > sizeof(a_pUserInfo->szLogonDomain) - sizeof(WCHAR)) /* -sizeof(WCHAR) because we have to add the terminating null char at the end later. */ { VBoxServiceVerbose(0, "Logon domain name too long (%d bytes) for buffer! Name will be truncated.\n", iLength); - iLength = sizeof(a_pUserInfo->szLogonDomain) - sizeof(TCHAR); + iLength = sizeof(a_pUserInfo->szLogonDomain) - sizeof(WCHAR); } - wcsncpy (a_pUserInfo->szLogonDomain, usBuffer, iLength); - wcscat (a_pUserInfo->szLogonDomain, L""); /* Add terminating null char. */ + if (iLength) + wcsncpy (a_pUserInfo->szLogonDomain, usBuffer, iLength); /* Only handle users which can login interactively or logged in remotely over native RDP. */ if ( (((SECURITY_LOGON_TYPE)sessionData->LogonType == Interactive) @@ -305,28 +382,14 @@ BOOL VBoxServiceVMInfoWinIsLoggedIn(VBOXSERVICEVMINFOUSER* a_pUserInfo, if (pBuffer) WTSFreeMemory(pBuffer); - - /* A user logged in, but it could be a stale/orphaned logon session. */ - BOOL bFoundInLUIDs = FALSE; - for (DWORD dwIndex = 0; dwIndex < a_dwNumOfProcLUIDs; dwIndex++) - { - if ( (a_pLuid[dwIndex].HighPart == sessionData->LogonId.HighPart) - && (a_pLuid[dwIndex].LowPart == sessionData->LogonId.LowPart)) - { - bLoggedIn = TRUE; - VBoxServiceVerbose(3, "User \"%ls\" is logged in!\n", a_pUserInfo->szUser); - break; - } - } } } } } LsaFreeReturnBuffer(sessionData); - return bLoggedIn; + return bFoundUser; } - #endif /* TARGET_NT4 */ int VBoxServiceWinGetComponentVersions(uint32_t uiClientID) diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp index a14069c17..538628516 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp @@ -38,7 +38,9 @@ # include # include # include -# include +# ifndef RT_OS_FREEBSD /* The header does not exist anymore since FreeBSD 9-current */ +# include +# endif # ifdef RT_OS_SOLARIS # include # endif @@ -174,8 +176,8 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown) if (RT_SUCCESS(rc)) { /* Write information to host. */ - rc = VBoxServiceWritePropF(g_VMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Revision", "%s", pszAddVer); - rc = VBoxServiceWritePropF(g_VMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Version", "%s", pszAddRev); + rc = VBoxServiceWritePropF(g_VMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Version", "%s", pszAddVer); + rc = VBoxServiceWritePropF(g_VMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Revision", "%s", pszAddRev); RTStrFree(pszAddVer); RTStrFree(pszAddRev); } @@ -218,15 +220,20 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown) return 1; } - PLUID pLuid = NULL; - DWORD dwNumOfProcLUIDs = VBoxServiceVMInfoWinGetLUIDsFromProcesses(&pLuid); - - VBOXSERVICEVMINFOUSER userInfo; - ZeroMemory (&userInfo, sizeof(VBOXSERVICEVMINFOUSER)); + PVBOXSERVICEVMINFOPROC pProcs; + DWORD dwNumProcs; + rc = VBoxServiceVMInfoWinProcessesEnumerate(&pProcs, &dwNumProcs); - for (int i = 0; i<(int)ulCount; i++) + for (ULONG i=0; i 0) { if (uiUserCount > 0) strcat (szUserList, ","); @@ -239,9 +246,7 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown) } } - if (NULL != pLuid) - ::LocalFree (pLuid); - + VBoxServiceVMInfoWinProcessesFree(pProcs); ::LsaFreeReturnBuffer(pSessions); # endif /* TARGET_NT4 */ #elif defined(RT_OS_FREEBSD) diff --git a/src/VBox/Additions/common/crOpenGL/Makefile.kmk b/src/VBox/Additions/common/crOpenGL/Makefile.kmk index 53c49fd98..bd64a824f 100644 --- a/src/VBox/Additions/common/crOpenGL/Makefile.kmk +++ b/src/VBox/Additions/common/crOpenGL/Makefile.kmk @@ -49,13 +49,11 @@ if1of ($(KBUILD_TARGET),linux solaris) ifneq ($(KBUILD_TARGET),solaris) # No DRI on Solaris yet VBoxOGL_FAKEDRI = 1 endif -# VBOX_PATH_MESA_SOURCE = $(PATH_ROOT)/src/libs/mesa-7.2 - VBOX_PATH_MESA_SOURCE = $(VBOX_PATH_X11_ROOT)/mesa-7.2 # Only Solaris right now needs C stubs because I can't figure out how to # generate the GOT based relocation ASM yet. - ifeq ($(KBUILD_TARGET),solaris) - ifdef VBoxOGL_FAKEDRI + ifdef VBoxOGL_FAKEDRI + if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),solaris.x86 solaris.amd64 linux.x86 linux.amd64) VBOX_OGL_GLX_USE_CSTUBS = 1 endif endif @@ -77,21 +75,20 @@ if1of ($(KBUILD_TARGET),linux solaris) $(VBOX_PATH_X11_ROOT)/fixesproto-4.0 \ $(VBOX_PATH_X11_ROOT)/libx11-1.1.5-other \ $(VBOX_PATH_X11_ROOT)/1.3/xorg \ - $(VBOX_PATH_MESA_SOURCE) \ - $(VBOX_PATH_MESA_SOURCE)/include \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/ \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/glapi \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/main \ - $(VBOX_PATH_MESA_SOURCE)/src/mesa/drivers/dri/common \ + $(VBOX_MESA_INCS) \ $(PATH_ROOT)/src/VBox/Additions/x11/x11include/libdrm-2.4.13 VBoxOGL_DEFS += VBOX_NO_NATIVEGL endif + ifdef VBoxOGL_DRI VBoxOGL_DEFS += VBOXOGL_DRI IN_DRI_DRIVER else ifdef VBoxOGL_FAKEDRI VBoxOGL_DEFS += VBOXOGL_FAKEDRI - VBoxOGL_DEFS.solaris += VBOX_OGL_GLX_USE_CSTUBS + ifdef VBOX_OGL_GLX_USE_CSTUBS + VBoxOGL_DEFS += VBOX_OGL_GLX_USE_CSTUBS + endif endif + ifeq ($(KBUILD_TARGET),win) #fixme?, INTERMEDIATES.win ain't working VBoxOGL_INTERMEDIATES += $(VBOX_PATH_CROGL_GENFILES)/cr_gl.h @@ -131,16 +128,18 @@ if1of ($(KBUILD_TARGET),linux solaris) else ifdef VBoxOGL_FAKEDRI VBoxOGL_SOURCES += \ fakedri_drv.c - VBoxOGL_SOURCES.linux += \ - $(VBOX_PATH_CROGL_GENFILES)/linux_glxapi_exports.asm \ - $(VBOX_PATH_CROGL_GENFILES)/linux_exports_dri.asm ifndef VBOX_OGL_GLX_USE_CSTUBS VBoxOGL_SOURCES.solaris += \ $(VBOX_PATH_CROGL_GENFILES)/solaris_glxapi_exports.asm \ $(VBOX_PATH_CROGL_GENFILES)/solaris_exports_dri.asm + VBoxOGL_SOURCES.linux += \ + $(VBOX_PATH_CROGL_GENFILES)/linux_glxapi_exports.asm \ + $(VBOX_PATH_CROGL_GENFILES)/linux_exports_dri.asm else VBoxOGL_SOURCES.solaris += \ $(VBOX_PATH_CROGL_GENFILES)/solaris_exports.c + VBoxOGL_SOURCES.linux += \ + $(VBOX_PATH_CROGL_GENFILES)/linux_exports.c endif else VBoxOGL_SOURCES.linux += \ @@ -294,7 +293,6 @@ $(VBOX_PATH_CROGL_GENFILES)/linux_glxapi_exports.asm: $(PATH_SUB_CURRENT)/Linux_ $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< endif else - # @todo linux if required ifeq ($(KBUILD_TARGET),solaris) $(VBOX_PATH_CROGL_GENFILES)/solaris_exports.c: \ $(PATH_SUB_CURRENT)/SunOS_exports.py \ @@ -302,6 +300,13 @@ $(VBOX_PATH_CROGL_GENFILES)/solaris_exports.c: \ | $$(dir $$@) $(call MSG_GENERATE,python,$@,$<) $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) + else +$(VBOX_PATH_CROGL_GENFILES)/linux_exports.c: \ + $(PATH_SUB_CURRENT)/Linux_exports.py \ + $(VBOX_CROGL_API_FILES) $(PATH_SUB_CURRENT)/entrypoints.py \ + | $$(dir $$@) + $(call MSG_GENERATE,python,$@,$<) + $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) endif endif # VBOX_OGL_GLX_USE_CSTUBS endif @@ -313,6 +318,10 @@ endif VBoxOGLarrayspu_TEMPLATE = VBOXCROGLR3GUESTDLL VBoxOGLarrayspu_INCS = \ array +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLarrayspu_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLarrayspu_INCS.darwin += $(PATH_OUT)/obj/VBoxOGL VBoxOGLarrayspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h \ @@ -335,6 +344,10 @@ VBoxOGLarrayspu_LIBS = \ VBoxOGLpassthroughspu_TEMPLATE = VBOXCROGLR3GUESTDLL VBoxOGLpassthroughspu_INCS = \ passthrough +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLpassthroughspu_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLpassthroughspu_SOURCES = \ passthrough/passthroughspu_init.c \ $(VBOX_PATH_CROGL_GENFILES)/passthroughspu.c @@ -360,6 +373,10 @@ VBoxOGLpackspu_TEMPLATE = VBOXCROGLR3GUESTDLL VBoxOGLpackspu_DEFS = TRACKS_STATE=1 PACKS=1 VBoxOGLpackspu_INCS = \ pack +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLpackspu_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLpackspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/packspu_proto.h \ $(VBOX_PATH_CROGL_GENFILES)/cr_packfunctions.h @@ -426,6 +443,10 @@ $(VBOX_PATH_CROGL_GENFILES)/packspu_proto.h: $(addprefix $(PATH_SUB_CURRENT)/pac VBoxOGLfeedbackspu_TEMPLATE = VBOXCROGLR3GUESTDLL VBoxOGLfeedbackspu_INCS = \ feedback +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLfeedbackspu_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLarrayspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/feedbackspu_proto.h VBoxOGLfeedbackspu_SOURCES = \ diff --git a/src/VBox/Additions/common/crOpenGL/fakedri_drv.c b/src/VBox/Additions/common/crOpenGL/fakedri_drv.c index 51f3d9e74..4a1a8dc99 100644 --- a/src/VBox/Additions/common/crOpenGL/fakedri_drv.c +++ b/src/VBox/Additions/common/crOpenGL/fakedri_drv.c @@ -139,14 +139,11 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd int rv; void *alPatch; void *pMesaEntry; -#ifdef RT_ARCH_AMD64 char patch[5]; void *shift; -#endif #ifndef VBOX_NO_MESA_PATCH_REPORTS - crDebug(""); - crDebug("vboxPatchMesaExport: %s", psFuncName); + crDebug("\nvboxPatchMesaExport: %s", psFuncName); #endif pMesaEntry = dlsym(RTLD_DEFAULT, psFuncName); @@ -171,7 +168,7 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd int rv; rv = dladdr1(pStart, &dlip1, (void**)&sym1, RTLD_DL_SYMENT); - if (!rv || !sym) + if (!rv || !sym1) { crError("Failed to get size for %p", pStart); return; @@ -187,10 +184,11 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd crDebug("Vbox code: start: %p, end %p, size: %i", pStart, pEnd, pEnd-pStart); #endif +#ifndef VBOX_OGL_GLX_USE_CSTUBS if (sym->st_size<(pEnd-pStart)) +#endif { -#ifdef RT_ARCH_AMD64 - /* Try to insert 5 bytes jmpq to our stub code */ + /* Try to insert 5 bytes jmp/jmpq to our stub code */ if (5>(pEnd-pStart)) { @@ -198,17 +196,22 @@ vboxPatchMesaExport(const char* psFuncName, const void *pStart, const void *pEnd return; } - shift = pStart-(dlip.dli_saddr+5); + shift = (void*)((intptr_t)pStart-((intptr_t)dlip.dli_saddr+5)); # ifndef VBOX_NO_MESA_PATCH_REPORTS - crDebug("Size is small, inserting jmpq with shift %p instead", shift); + crDebug("Inserting jmp[q] with shift %p instead", shift); # endif - if ( ((((long)shift)&0x00000000) != 0) - && ((((long)shift)&0x00000000) != 0xFFFFFFFF00000000)) +#ifdef RT_ARCH_AMD64 { - crDebug("Can't patch offset is too big.(%s)", psFuncName); - return; + int64_t offset = (intptr_t)shift; + + if (offset>INT32_MAX || offset */ -#include +#ifndef AUTOCONF_INCLUDED +# include +#endif #include #include diff --git a/src/VBox/Additions/linux/installer/vboxadd.sh b/src/VBox/Additions/linux/installer/vboxadd.sh index 2c922dabf..de925a910 100755 --- a/src/VBox/Additions/linux/installer/vboxadd.sh +++ b/src/VBox/Additions/linux/installer/vboxadd.sh @@ -1,6 +1,6 @@ #! /bin/sh # Sun VirtualBox -# Linux Additions kernel module init script ($Revision: 55616 $) +# Linux Additions kernel module init script ($Revision: 56414 $) # # @@ -38,6 +38,11 @@ BUILDVBOXGUEST=`/bin/ls /usr/src/vboxguest*/build_in_tmp 2>/dev/null|cut -d' ' - BUILDVBOXVFS=`/bin/ls /usr/src/vboxvfs*/build_in_tmp 2>/dev/null|cut -d' ' -f1` BUILDVBOXVIDEO=`/bin/ls /usr/src/vboxvideo*/build_in_tmp 2>/dev/null|cut -d' ' -f1` LOG="/var/log/vboxadd-install.log" +MODPROBE=/sbin/modprobe + +if $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then + MODPROBE="$MODPROBE --allow-unsupported-modules" +fi # Check architecture cpu=`uname -m`; @@ -204,7 +209,7 @@ start() fail "Cannot remove $userdev" } - modprobe vboxguest >/dev/null 2>&1 || { + $MODPROBE vboxguest >/dev/null 2>&1 || { fail "modprobe vboxguest failed" } sleep .5 @@ -256,7 +261,7 @@ start() if [ -n "$BUILDVBOXVFS" ]; then running_vboxvfs || { - modprobe vboxvfs > /dev/null 2>&1 || { + $MODPROBE vboxvfs > /dev/null 2>&1 || { if dmesg | grep "vboxConnect failed" > /dev/null 2>&1; then fail_msg echo "Unable to start shared folders support. Make sure that your VirtualBox build" diff --git a/src/VBox/Additions/linux/sharedfolders/Makefile.module b/src/VBox/Additions/linux/sharedfolders/Makefile.module index d79709443..010cd0ade 100644 --- a/src/VBox/Additions/linux/sharedfolders/Makefile.module +++ b/src/VBox/Additions/linux/sharedfolders/Makefile.module @@ -196,6 +196,10 @@ ifeq ($(KERN_VERSION), 24) # 2.4 # +ifeq ($(BUILD_TARGET_ARCH),amd64) + KFLAGS += -mcmodel=kernel +endif + CFLAGS := -O2 -DVBOX_LINUX_2_4 $(INCL) $(KFLAGS) $(KDEBUG) MODULE_EXT := o diff --git a/src/VBox/Additions/linux/sharedfolders/utils.c b/src/VBox/Additions/linux/sharedfolders/utils.c index 10c42ce4a..5e57f774e 100644 --- a/src/VBox/Additions/linux/sharedfolders/utils.c +++ b/src/VBox/Additions/linux/sharedfolders/utils.c @@ -27,7 +27,6 @@ /* #define USE_VMALLOC */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 0) /* * sf_reg_aops and sf_backing_dev_info are just quick implementations to make * sendfile work. For more information have a look at @@ -39,18 +38,6 @@ * http://pserver.samba.org/samba/ftp/cifs-cvs/samplefs.tar.gz */ -static struct backing_dev_info sf_backing_dev_info = { - .ra_pages = 0, /* No readahead */ -# if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 12) - .capabilities = BDI_CAP_MAP_DIRECT /* MAP_SHARED */ - | BDI_CAP_MAP_COPY /* MAP_PRIVATE */ - | BDI_CAP_READ_MAP /* can be mapped for reading */ - | BDI_CAP_WRITE_MAP /* can be mapped for writing */ - | BDI_CAP_EXEC_MAP, /* can be mapped for execution */ -# endif -}; -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 0) */ - #if LINUX_VERSION_CODE < KERNEL_VERSION (2, 6, 0) static void sf_ftime_from_timespec (time_t *time, RTTIMESPEC *ts) @@ -120,7 +107,7 @@ sf_init_inode (struct sf_glob_info *sf_g, struct inode *inode, #if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 0) inode->i_mapping->a_ops = &sf_reg_aops; - inode->i_mapping->backing_dev_info = &sf_backing_dev_info; + inode->i_mapping->backing_dev_info = &sf_g->bdi; #endif if (is_dir) { @@ -811,3 +798,34 @@ int sf_get_volume_info(struct super_block *sb, STRUCT_STATFS *stat) struct dentry_operations sf_dentry_ops = { .d_revalidate = sf_dentry_revalidate }; + +int sf_init_backing_dev(struct sf_glob_info *sf_g, const char *name) +{ + int rc = 0; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 0) + sf_g->bdi.ra_pages = 0; /* No readahead */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 12) + sf_g->bdi.capabilities = BDI_CAP_MAP_DIRECT /* MAP_SHARED */ + | BDI_CAP_MAP_COPY /* MAP_PRIVATE */ + | BDI_CAP_READ_MAP /* can be mapped for reading */ + | BDI_CAP_WRITE_MAP /* can be mapped for writing */ + | BDI_CAP_EXEC_MAP; /* can be mapped for execution */ +# endif /* >= 2.6.12 */ +# if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 24) + rc = bdi_init(&sf_g->bdi); +# if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 26) + if (!rc) + rc = bdi_register(&sf_g->bdi, NULL, "vboxvfs-%s", name); +# endif /* >= 2.6.26 */ +# endif /* >= 2.6.24 */ +#endif /* >= 2.6.0 */ + return rc; +} + +void sf_done_backing_dev(struct sf_glob_info *sf_g) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 24) + bdi_destroy(&sf_g->bdi); /* includes bdi_unregister() */ +#endif +} diff --git a/src/VBox/Additions/linux/sharedfolders/vfsmod.c b/src/VBox/Additions/linux/sharedfolders/vfsmod.c index 964e821a8..8e9ca2e0b 100644 --- a/src/VBox/Additions/linux/sharedfolders/vfsmod.c +++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.c @@ -286,6 +286,12 @@ sf_read_super_aux (struct super_block *sb, void *data, int flags) goto fail3; } + if (sf_init_backing_dev(sf_g, info->name)) { + err = -EINVAL; + LogFunc(("could not init bdi\n")); + goto fail4; + } + sf_init_inode (sf_g, iroot, &fsinfo); SET_INODE_INFO (iroot, sf_i); @@ -297,13 +303,15 @@ sf_read_super_aux (struct super_block *sb, void *data, int flags) if (!droot) { err = -ENOMEM; /* XXX */ LogFunc(("d_alloc_root failed\n")); - goto fail4; + goto fail5; } sb->s_root = droot; SET_GLOB_INFO (sb, sf_g); return 0; + fail5: + sf_done_backing_dev(sf_g); fail4: iput (iroot); fail3: @@ -371,6 +379,7 @@ sf_put_super (struct super_block *sb) sf_g = GET_GLOB_INFO (sb); BUG_ON (!sf_g); + sf_done_backing_dev(sf_g); sf_glob_free (sf_g); } diff --git a/src/VBox/Additions/linux/sharedfolders/vfsmod.h b/src/VBox/Additions/linux/sharedfolders/vfsmod.h index 13b85a7dc..0433fa534 100644 --- a/src/VBox/Additions/linux/sharedfolders/vfsmod.h +++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.h @@ -25,6 +25,10 @@ #include "the-linux-kernel.h" #include "version-generated.h" +#if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 0) +# include +#endif + #include "VBoxCalls.h" #include "vbsfmount.h" @@ -39,6 +43,9 @@ struct sf_glob_info { int fmode; int dmask; int fmask; +#if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 0) + struct backing_dev_info bdi; +#endif }; /* per-inode information */ @@ -107,6 +114,10 @@ sf_dir_info_alloc (void); extern int sf_dir_read_all (struct sf_glob_info *sf_g, struct sf_inode_info *sf_i, struct sf_dir_info *sf_d, SHFLHANDLE handle); +extern int +sf_init_backing_dev (struct sf_glob_info *sf_g, const char *name); +extern void +sf_done_backing_dev (struct sf_glob_info *sf_g); #if LINUX_VERSION_CODE < KERNEL_VERSION (2, 6, 0) #define STRUCT_STATFS struct statfs diff --git a/src/VBox/Additions/solaris/Installer/makepackage.sh b/src/VBox/Additions/solaris/Installer/makepackage.sh index 19759eab8..72a05bb1e 100755 --- a/src/VBox/Additions/solaris/Installer/makepackage.sh +++ b/src/VBox/Additions/solaris/Installer/makepackage.sh @@ -26,7 +26,8 @@ if test -z "$3"; then exit 1 fi -VBOX_INSTALLED_DIR=$1 +VBOX_BASEPKG_DIR=$1 +VBOX_INSTALLED_DIR="$VBOX_BASEPKG_DIR"/opt/VirtualBoxAdditions VBOX_PKGFILENAME=$2 VBOX_SVN_REV=$3 @@ -52,8 +53,15 @@ filelist_fixup() mv -f "tmp-$1" "$1" } -# prepare file list + +# Create relative hardlinks cd "$VBOX_INSTALLED_DIR" +ln -f ./VBoxISAExec $VBOX_INSTALLED_DIR/VBoxService +ln -f ./VBoxISAExec $VBOX_INSTALLED_DIR/VBoxClient +ln -f ./VBoxISAExec $VBOX_INSTALLED_DIR/VBoxControl + +# prepare file list +cd "$VBOX_BASEPKG_DIR" echo 'i pkginfo=./vboxguest.pkginfo' > prototype echo 'i postinstall=./postinstall.sh' >> prototype echo 'i preremove=./preremove.sh' >> prototype @@ -62,51 +70,28 @@ echo 'i depend=./vboxguest.depend' >> prototype if test -f "./vboxguest.copyright"; then echo 'i copyright=./vboxguest.copyright' >> prototype fi -find . -print | $VBOX_GGREP -v -E 'prototype|makepackage.sh|vboxguest.pkginfo|postinstall.sh|preremove.sh|vboxguest.space|vboxguest.depend|vboxguest.copyright' | pkgproto >> prototype -# don't grok for the class files -filelist_fixup prototype '$2 == "none"' '$5 = "root"; $6 = "bin"' -filelist_fixup prototype '$2 == "none"' '$3 = "opt/VirtualBoxAdditions/"$3"="$3' +# Exclude directory entries to not cause conflicts (owner,group) with existing directories in the system +find . ! -type d | $VBOX_GGREP -v -E 'prototype|makepackage.sh|vboxguest.pkginfo|postinstall.sh|preremove.sh|vboxguest.space|vboxguest.depend|vboxguest.copyright' | pkgproto >> prototype -# VBoxService requires suid -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxService=VBoxService"' '$4 = "4755"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxService=amd64/VBoxService"' '$4 = "4755"' +# Include opt/VirtualBoxAdditions and subdirectories as we want uninstall to clean up directory structure as well +find . -type d | $VBOX_GGREP -E 'opt/VirtualBoxAdditions' | pkgproto >> prototype -# 32-bit vboxguest -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/vboxguest=vboxguest"' '$3 = "usr/kernel/drv/vboxguest=vboxguest"; $6="sys"' +# Include /etc/fs/vboxfs (as we need to create the subdirectory) +find . -type d | $VBOX_GGREP -E 'etc/fs/vboxfs' | pkgproto >> prototype -# 64-bit vboxguest -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/vboxguest=amd64/vboxguest"' '$3 = "usr/kernel/drv/amd64/vboxguest=amd64/vboxguest"; $6="sys"' -# vboxguest module config file -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/vboxguest.conf=vboxguest.conf"' '$3 = "usr/kernel/drv/vboxguest.conf=vboxguest.conf"' - -# vboxfsmount binary (always 32-bit on combined package) -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/vboxfsmount=vboxfsmount"' '$3 = "etc/fs/vboxfs/mount=vboxfsmount"; $6="sys"' - -# this is required for amd64-specific package where we do not build 32-bit binaries -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/vboxfsmount=amd64/vboxfsmount"' '$3 = "etc/fs/vboxfs/mount=amd64/vboxfsmount"; $6="sys"' - -# crogl 32-bit opengl fixup -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGL.so=VBoxOGL.so"' '$3 = "usr/lib/VBoxOGL.so=VBoxOGL.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGLcrutil.so=VBoxOGLcrutil.so"' '$3 = "usr/lib/VBoxOGLcrutil.so=VBoxOGLcrutil.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGLfeedbackspu.so=VBoxOGLfeedbackspu.so"' '$3 = "usr/lib/VBoxOGLfeedbackspu.so=VBoxOGLfeedbackspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGLpassthroughspu.so=VBoxOGLpassthroughspu.so"' '$3 = "usr/lib/VBoxOGLpassthroughspu.so=VBoxOGLpassthroughspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGLarrayspu.so=VBoxOGLarrayspu.so"' '$3 = "usr/lib/VBoxOGLarrayspu.so=VBoxOGLarrayspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGLerrorspu.so=VBoxOGLerrorspu.so"' '$3 = "usr/lib/VBoxOGLerrorspu.so=VBoxOGLerrorspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxOGLpackspu.so=VBoxOGLpackspu.so"' '$3 = "usr/lib/VBoxOGLpackspu.so=VBoxOGLpackspu.so"; $6="sys"' +# don't grok for the class files +filelist_fixup prototype '$2 == "none"' '$5 = "root"; $6 = "bin"' -# crogl 64-bit opengl fixup -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGL.so=amd64/VBoxOGL.so"' '$3 = "usr/lib/amd64/VBoxOGL.so=amd64/VBoxOGL.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGLcrutil.so=amd64/VBoxOGLcrutil.so"' '$3 = "usr/lib/amd64/VBoxOGLcrutil.so=amd64/VBoxOGLcrutil.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGLfeedbackspu.so=amd64/VBoxOGLfeedbackspu.so"' '$3 = "usr/lib/amd64/VBoxOGLfeedbackspu.so=amd64/VBoxOGLfeedbackspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGLpassthroughspu.so=amd64/VBoxOGLpassthroughspu.so"' '$3 = "usr/lib/amd64/VBoxOGLpassthroughspu.so=amd64/VBoxOGLpassthroughspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGLarrayspu.so=amd64/VBoxOGLarrayspu.so"' '$3 = "usr/lib/amd64/VBoxOGLarrayspu.so=amd64/VBoxOGLarrayspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGLerrorspu.so=amd64/VBoxOGLerrorspu.so"' '$3 = "usr/lib/amd64/VBoxOGLerrorspu.so=amd64/VBoxOGLerrorspu.so"; $6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxOGLpackspu.so=amd64/VBoxOGLpackspu.so"' '$3 = "usr/lib/amd64/VBoxOGLpackspu.so=amd64/VBoxOGLpackspu.so"; $6="sys"' +# VBoxService requires suid +filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxService"' '$4 = "4755"' +filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxService"' '$4 = "4755"' +# vboxguest +filelist_fixup prototype '$3 == "usr/kernel/drv/vboxguest"' '$6="sys"' +filelist_fixup prototype '$3 == "usr/kernel/drv/amd64/vboxguest"' '$6="sys"' -filelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/vboxservice.xml=vboxservice.xml"' '$3 = "var/svc/manifest/system/virtualbox/vboxservice.xml=vboxservice.xml"' echo " --- start of prototype ---" cat prototype echo " --- end of prototype --- " diff --git a/src/VBox/Additions/solaris/Installer/postinstall.sh b/src/VBox/Additions/solaris/Installer/postinstall.sh index c9ddc4c7b..95136723a 100755 --- a/src/VBox/Additions/solaris/Installer/postinstall.sh +++ b/src/VBox/Additions/solaris/Installer/postinstall.sh @@ -72,7 +72,9 @@ uncompress_files() } solaris64dir="amd64" +solaris32dir="i386" vboxadditions_path="$BASEDIR/opt/VirtualBoxAdditions" +vboxadditions32_path=$vboxadditions_path/$solaris32dir vboxadditions64_path=$vboxadditions_path/$solaris64dir # get the current zone @@ -89,10 +91,10 @@ vboxadditionsisa_path=$vboxadditions_path/$isadir # uncompress if necessary -if test -f "$vboxadditions_path/VBoxClient.Z" || test -f "$vboxadditions64_path/VBoxClient.Z"; then +if test -f "$vboxadditions32_path/VBoxClient.Z" || test -f "$vboxadditions64_path/VBoxClient.Z"; then echo "Uncompressing files..." - if test -f "$vboxadditions_path/VBoxClient.Z"; then - uncompress_files "$vboxadditions_path" + if test -f "$vboxadditions32_path/VBoxClient.Z"; then + uncompress_files "$vboxadditions32_path" fi if test -f "$vboxadditions64_path/VBoxClient.Z"; then uncompress_files "$vboxadditions64_path" @@ -111,12 +113,13 @@ if test "$currentzone" = "global"; then # create the device link /usr/sbin/devfsadm -i vboxguest - sync fi -# check if X.Org exists -if test -f "/usr/X11/bin/Xorg"; then +# check if X.Org exists (snv_130 and higher have /usr/X11/* as /usr/*) +if test -f "/usr/bin/Xorg"; then + xorgbin="/usr/bin/Xorg" +elif test -f "/usr/X11/bin/Xorg"; then xorgbin="/usr/X11/bin/Xorg" else xorgbin="" @@ -128,21 +131,13 @@ echo "Creating links..." if test "$currentzone" = "global"; then /usr/sbin/installf -c none $PKGINST /dev/vboxguest=../devices/pci@0,0/pci80ee,cafe@4:vboxguest s fi -if test ! -z "$xorgbin"; then - /usr/sbin/installf -c none $PKGINST /usr/bin/VBoxClient=$vboxadditions_path/VBox.sh s - /usr/sbin/installf -c none $PKGINST /usr/bin/VBoxRandR=$vboxadditions_path/VBoxRandR.sh s - /usr/sbin/installf -c none $PKGINST /usr/bin/VBoxClient-all=$vboxadditions_path/1099.vboxclient s -fi -/usr/sbin/installf -c none $PKGINST /usr/bin/VBoxControl=$vboxadditions_path/VBox.sh s -/usr/sbin/installf -c none $PKGINST /usr/bin/VBoxService=$vboxadditions_path/VBox.sh s - # Install Xorg components to the required places if test ! -z "$xorgbin"; then - xorgversion_long=`/usr/X11/bin/Xorg -version 2>&1 | grep "X Window System Version"` + xorgversion_long=`$xorgbin -version 2>&1 | grep "X Window System Version"` xorgversion=`/usr/bin/expr "${xorgversion_long}" : 'X Window System Version \([^ ]*\)'` if test -z "$xorgversion_long"; then - xorgversion_long=`/usr/X11/bin/Xorg -version 2>&1 | grep "X.Org X Server"` + xorgversion_long=`$xorgbin -version 2>&1 | grep "X.Org X Server"` xorgversion=`/usr/bin/expr "${xorgversion_long}" : 'X.Org X Server \([^ ]*\)'` fi @@ -188,85 +183,110 @@ if test ! -z "$xorgbin"; then # Exit as partially failed installation retval=2 else - echo "Configuring X.Org..." - - # 32-bit x11 drivers - if test -f "$vboxadditions_path/$vboxmouse_src"; then - vboxmouse_dest="/usr/X11/lib/modules/input/vboxmouse_drv.so" - vboxvideo_dest="/usr/X11/lib/modules/drivers/vboxvideo_drv.so" - /usr/sbin/installf -c none $PKGINST "$vboxmouse_dest" f - /usr/sbin/installf -c none $PKGINST "$vboxvideo_dest" f - cp "$vboxadditions_path/$vboxmouse_src" "$vboxmouse_dest" - cp "$vboxadditions_path/$vboxvideo_src" "$vboxvideo_dest" - - # Removing redundent names from pkg and files from disk - /usr/sbin/removef $PKGINST $vboxadditions_path/vboxmouse_drv_* 1>/dev/null - /usr/sbin/removef $PKGINST $vboxadditions_path/vboxvideo_drv_* 1>/dev/null - rm -f $vboxadditions_path/vboxmouse_drv_* - rm -f $vboxadditions_path/vboxvideo_drv_* - fi + echo "Installing mouse and video drivers for X.Org $xorgversion..." - # 64-bit x11 drivers - if test -f "$vboxadditions64_path/$vboxmouse_src"; then - vboxmouse_dest="/usr/X11/lib/modules/input/$solaris64dir/vboxmouse_drv.so" - vboxvideo_dest="/usr/X11/lib/modules/drivers/$solaris64dir/vboxvideo_drv.so" - /usr/sbin/installf -c none $PKGINST "$vboxmouse_dest" f - /usr/sbin/installf -c none $PKGINST "$vboxvideo_dest" f - cp "$vboxadditions64_path/$vboxmouse_src" "$vboxmouse_dest" - cp "$vboxadditions64_path/$vboxvideo_src" "$vboxvideo_dest" - - # Removing redundent names from pkg and files from disk - /usr/sbin/removef $PKGINST $vboxadditions64_path/vboxmouse_drv_* 1>/dev/null - /usr/sbin/removef $PKGINST $vboxadditions64_path/vboxvideo_drv_* 1>/dev/null - rm -f $vboxadditions64_path/vboxmouse_drv_* - rm -f $vboxadditions64_path/vboxvideo_drv_* + # Determine destination paths (snv_130 and above use "/usr/lib/xorg", older use "/usr/X11/lib" + vboxmouse32_dest_base="/usr/lib/xorg/modules/input" + if test ! -d $vboxmouse32_dest_base; then + vboxmouse32_dest_base="/usr/X11/lib/modules/input" fi + vboxvideo32_dest_base="/usr/lib/xorg/modules/drivers" + if test ! -d $vboxvideo32_dest_base; then + vboxvideo32_dest_base="/usr/X11/lib/modules/drivers" + fi + + vboxmouse64_dest_base=$vboxmouse32_dest_base/$solaris64dir + vboxvideo64_dest_base=$vboxvideo32_dest_base/$solaris64dir - # Some distros like Indiana have no xorg.conf, deal with this - if test ! -f '/etc/X11/xorg.conf' && test ! -f '/etc/X11/.xorg.conf'; then + # Make sure destination path exists + if test ! -d $vboxmouse32_dest_base || test ! -d $vboxvideo32_dest_base || test ! -d $vboxmouse64_dest_base || test ! -d $vboxvideo64_dest_base; then + echo "*** Missing destination paths for mouse or video modules. Aborting." + echo "*** Failed to install the VirtualBox X Window System drivers." - # Xorg 1.3.x+ should use the modeline less Xorg confs while older should - # use ones with all the video modelines in place. Argh. - xorgconf_file="solaris_xorg_modeless.conf" - xorgconf_unfit="solaris_xorg.conf" + # Exit as partially failed installation + retval=2 + else + # 32-bit x11 drivers + if test -f "$vboxadditions32_path/$vboxmouse_src"; then + vboxmouse_dest="$vboxmouse32_dest_base/vboxmouse_drv.so" + vboxvideo_dest="$vboxvideo32_dest_base/vboxvideo_drv.so" + /usr/sbin/installf -c none $PKGINST "$vboxmouse_dest" f + /usr/sbin/installf -c none $PKGINST "$vboxvideo_dest" f + cp "$vboxadditions32_path/$vboxmouse_src" "$vboxmouse_dest" + cp "$vboxadditions32_path/$vboxvideo_src" "$vboxvideo_dest" + + # Removing redundent names from pkg and files from disk + /usr/sbin/removef $PKGINST $vboxadditions32_path/vboxmouse_drv_* 1>/dev/null + /usr/sbin/removef $PKGINST $vboxadditions32_path/vboxvideo_drv_* 1>/dev/null + rm -f $vboxadditions32_path/vboxmouse_drv_* + rm -f $vboxadditions32_path/vboxvideo_drv_* + fi + + # 64-bit x11 drivers + if test -f "$vboxadditions64_path/$vboxmouse_src"; then + vboxmouse_dest="$vboxmouse64_dest_base/vboxmouse_drv.so" + vboxvideo_dest="$vboxvideo64_dest_base/vboxvideo_drv.so" + /usr/sbin/installf -c none $PKGINST "$vboxmouse_dest" f + /usr/sbin/installf -c none $PKGINST "$vboxvideo_dest" f + cp "$vboxadditions64_path/$vboxmouse_src" "$vboxmouse_dest" + cp "$vboxadditions64_path/$vboxvideo_src" "$vboxvideo_dest" + + # Removing redundent names from pkg and files from disk + /usr/sbin/removef $PKGINST $vboxadditions64_path/vboxmouse_drv_* 1>/dev/null + /usr/sbin/removef $PKGINST $vboxadditions64_path/vboxvideo_drv_* 1>/dev/null + rm -f $vboxadditions64_path/vboxmouse_drv_* + rm -f $vboxadditions64_path/vboxvideo_drv_* + fi + + # Some distros like Indiana have no xorg.conf, deal with this + if test ! -f '/etc/X11/xorg.conf' && test ! -f '/etc/X11/.xorg.conf'; then + + # Xorg 1.3.x+ should use the modeline less Xorg confs while older should + # use ones with all the video modelines in place. Argh. + xorgconf_file="solaris_xorg_modeless.conf" + xorgconf_unfit="solaris_xorg.conf" + case "$xorgversion" in + 7.1.* | 7.2.* | 6.9.* | 7.0.* ) + xorgconf_file="solaris_xorg.conf" + xorgconf_unfit="solaris_xorg_modeless.conf" + ;; + esac + + /usr/sbin/removef $PKGINST $vboxadditions_path/$xorgconf_file 1>/dev/null + mv -f $vboxadditions_path/$xorgconf_file /etc/X11/.xorg.conf + + /usr/sbin/removef $PKGINST $vboxadditions_path/$xorgconf_unfit 1>/dev/null + rm -f $vboxadditions_path/$xorgconf_unfit + fi case "$xorgversion" in - 7.1.* | 7.2.* | 6.9.* | 7.0.* ) - xorgconf_file="solaris_xorg.conf" - xorgconf_unfit="solaris_xorg_modeless.conf" + 7.1.* | 7.2.* | 6.9.* | 7.0.* | 1.3.* ) + $vboxadditions_path/x11config.pl + ;; + 1.5.* | 1.6.* | 1.7.* ) + $vboxadditions_path/x11config15sol.pl ;; esac - - /usr/sbin/removef $PKGINST $vboxadditions_path/$xorgconf_file 1>/dev/null - mv -f $vboxadditions_path/$xorgconf_file /etc/X11/.xorg.conf - - /usr/sbin/removef $PKGINST $vboxadditions_path/$xorgconf_unfit 1>/dev/null - rm -f $vboxadditions_path/$xorgconf_unfit fi - case "$xorgversion" in - 7.1.* | 7.2.* | 6.9.* | 7.0.* | 1.3.* ) - $vboxadditions_path/x11config.pl - ;; - 1.5.* | 1.6.* | 1.7.* ) - $vboxadditions_path/x11config15sol.pl - ;; - esac fi # Setup our VBoxClient echo "Configuring client..." vboxclient_src=$vboxadditions_path + vboxclient_dest="/usr/share/gnome/autostart" + clientinstalled=0 + if test -d "$vboxclient_dest"; then + /usr/sbin/installf -c none $PKGINST $vboxclient_dest/vboxclient.desktop=$vboxadditions_path/vboxclient.desktop s + clientinstalled=1 + fi vboxclient_dest="/usr/dt/config/Xsession.d" if test -d "$vboxclient_dest"; then - /usr/sbin/installf -c none $PKGINST "$vboxclient_dest/1099.vboxclient" f - cp "$vboxclient_src/1099.vboxclient" "$vboxclient_dest/1099.vboxclient" - chmod a+rx "$vboxclient_dest/1099.vboxclient" - elif test -d "/usr/share/gnome/autostart"; then - vboxclient_dest="/usr/share/gnome/autostart" - /usr/sbin/installf -c none $PKGINST "$vboxclient_dest/vboxclient.desktop" f - cp "$vboxclient_src/vboxclient.desktop" "$vboxclient_dest/vboxclient.desktop" - else - echo "*** Failed to configure client!! Couldn't find autostart directory." + /usr/sbin/installf -c none $PKGINST $vboxclient_dest/1099.vboxclient=$vboxadditions_path/1099.vboxclient s + clientinstalled=1 + fi + if test $clientinstalled -eq 0; then + echo "*** Failed to configure client, couldn't find any autostart directory!" + # Exit as partially failed installation retval=2 fi else @@ -286,6 +306,7 @@ fi # Move the appropriate module to kernel/fs & remove the unused module name from pkg and file from disk # 64-bit shared folder module if test -f "$vboxadditions64_path/$vboxfsmod"; then + echo "Installing 64-bit shared folders module..." /usr/sbin/installf -c none $PKGINST "/usr/kernel/fs/$solaris64dir/vboxfs" f mv -f $vboxadditions64_path/$vboxfsmod /usr/kernel/fs/$solaris64dir/vboxfs /usr/sbin/removef $PKGINST $vboxadditions64_path/$vboxfsmod 1>/dev/null @@ -294,12 +315,13 @@ if test -f "$vboxadditions64_path/$vboxfsmod"; then fi # 32-bit shared folder module -if test -f "$vboxadditions_path/$vboxfsmod"; then +if test -f "$vboxadditions32_path/$vboxfsmod"; then + echo "Installing 32-bit shared folders module..." /usr/sbin/installf -c none $PKGINST "/usr/kernel/fs/vboxfs" f - mv -f $vboxadditions_path/$vboxfsmod /usr/kernel/fs/vboxfs - /usr/sbin/removef $PKGINST $vboxadditions_path/$vboxfsmod 1>/dev/null - /usr/sbin/removef $PKGINST $vboxadditions_path/$vboxfsunused 1>/dev/null - rm -f $vboxadditions_path/$vboxfsunused + mv -f $vboxadditions32_path/$vboxfsmod /usr/kernel/fs/vboxfs + /usr/sbin/removef $PKGINST $vboxadditions32_path/$vboxfsmod 1>/dev/null + /usr/sbin/removef $PKGINST $vboxadditions32_path/$vboxfsunused 1>/dev/null + rm -f $vboxadditions32_path/$vboxfsunused fi # install openGL extensions for X.Org diff --git a/src/VBox/Additions/solaris/Installer/vboxguest.sh b/src/VBox/Additions/solaris/Installer/vboxguest.sh index 733890d08..bc30142d7 100755 --- a/src/VBox/Additions/solaris/Installer/vboxguest.sh +++ b/src/VBox/Additions/solaris/Installer/vboxguest.sh @@ -52,9 +52,9 @@ check_if_installed() module_loaded() { if test -f "/etc/name_to_major"; then - loadentry=`cat /etc/name_to_major | grep $1` + loadentry=`cat /etc/name_to_major | grep "$1 "` else - loadentry=`/usr/sbin/modinfo | grep $1` + loadentry=`/usr/sbin/modinfo | grep "$1 "` fi if test -z "$loadentry"; then return 1 @@ -92,12 +92,12 @@ start_module() info "VirtualBox guest kernel module already loaded." else /usr/sbin/add_drv -i'pci80ee,cafe' -m'* 0666 root sys' $MODNAME + sync if test ! vboxguest_loaded; then abort "Failed to load VirtualBox guest kernel module." elif test -c "/devices/pci@0,0/pci80ee,cafe@4:$MODNAME"; then info "VirtualBox guest kernel module loaded." else - stop abort "Aborting due to attach failure." fi fi diff --git a/src/VBox/Additions/solaris/Makefile.kmk b/src/VBox/Additions/solaris/Makefile.kmk index 1d4e9a214..8cd4eb276 100644 --- a/src/VBox/Additions/solaris/Makefile.kmk +++ b/src/VBox/Additions/solaris/Makefile.kmk @@ -31,12 +31,51 @@ ifeq ($(KBUILD_HOST),solaris) include $(PATH_SUB_CURRENT)/DRM/Makefile.kmk endif -PKGFILENAME := VBoxSolarisAdditions.pkg -PKGINFO_ARCH = $(shell uname -p) -PKGINFO_REVSTAMP = $(date %Y.%m.%d.%H.%M) -VBOX_PATH_SOLARIS_ADDITION_INSTALLER := $(PATH_SUB_CURRENT)/Installer -VBOX_PATH_X11_ADDITION_INSTALLER := $(PATH_ROOT)/src/VBox/Additions/x11/Installer -SOLARIS_ADD_INST_DIR := $(PATH_TARGET)/AdditionsInstaller +ifdef VBOX_WITH_COMBINED_SOLARIS_PACKAGE ## @todo remove this when tinderclient.pl is updated. + VBOX_WITH_COMBINED_GUEST_PACKAGE := 1 +endif + +PKGFILENAME := VBoxSolarisAdditions.pkg +PKGINFO_ARCH = $(shell uname -p) +PKGINFO_REVSTAMP = $(date %Y.%m.%d.%H.%M) +VBOX_PATH_SOLARIS_ADDITION_INSTALLER := $(PATH_SUB_CURRENT)/Installer +VBOX_PATH_X11_ADDITION_INSTALLER := $(PATH_ROOT)/src/VBox/Additions/x11/Installer + +SOLARIS_ADDDIR_NAME_64 := amd64 +SOLARIS_ADDDIR_NAME_32 := i386 + +SOLARIS_ADDINST_OUT_DIR := $(PATH_TARGET)/AdditionsInstaller +SOLARIS_VBOXADDINST_SUBDIR := /opt/VirtualBoxAdditions +SOLARIS_VBOXADDINST_DIR := $(SOLARIS_ADDINST_OUT_DIR)$(SOLARIS_VBOXADDINST_SUBDIR) +SOLARIS_VBOXADDINST_DIR_32 := $(SOLARIS_VBOXADDINST_DIR)/$(SOLARIS_ADDDIR_NAME_32) +SOLARIS_VBOXADDINST_DIR_64 := $(SOLARIS_VBOXADDINST_DIR)/$(SOLARIS_ADDDIR_NAME_64) + +SOLARIS_ADD_OUT_BIN_64 := $(PATH_OUT_BASE)/solaris.amd64/$(KBUILD_TYPE)/bin/additions +SOLARIS_ADD_OUT_BIN_32 := $(PATH_OUT_BASE)/solaris.x86/$(KBUILD_TYPE)/bin/additions +SOLARIS_ADD_OUT_BIN_ISA := $(PATH_OUT_BASE)/solaris.$(KBUILD_TARGET_ARCH)/$(KBUILD_TYPE)/bin/additions + +SOLARIS_ADD_DRIVERINST_DIR := $(SOLARIS_ADDINST_OUT_DIR)/usr/kernel/drv +SOLARIS_ADD_DRIVERINST_DIR_32 := $(SOLARIS_ADD_DRIVERINST_DIR) +SOLARIS_ADD_DRIVERINST_DIR_64 := $(SOLARIS_ADD_DRIVERINST_DIR)/amd64 + +SOLARIS_ADD_SYSLIBINST_DIR_32 := $(SOLARIS_ADDINST_OUT_DIR)/usr/lib +SOLARIS_ADD_SYSLIBINST_DIR_64 := $(SOLARIS_ADDINST_OUT_DIR)/usr/lib/amd64 + +SOLARIS_ADD_USRBIN_DIR := $(SOLARIS_ADDINST_OUT_DIR)/usr/bin +SOLARIS_ADD_ETCFS_DIR := $(SOLARIS_ADDINST_OUT_DIR)/etc/fs/vboxfs +SOLARIS_ADD_SERVICESINST_DIR := $(SOLARIS_ADDINST_OUT_DIR)/var/svc/manifest/system/virtualbox + +ifeq ($(KBUILD_TARGET_ARCH),x86) + SOLARIS_ADDDIR_NAME_ISA := $(SOLARIS_ADDDIR_NAME_32) + SOLARIS_VBOXADDINST_DIR_ISA := $(SOLARIS_VBOXADDINST_DIR_32) + SOLARIS_ADD_DRIVERINST_DIR_ISA := $(SOLARIS_ADD_DRIVERINST_DIR_32) + SOLARIS_ADD_SYSLIBINST_DIR_ISA := $(SOLARIS_ADD_SYSLIBINST_DIR_32) +else + SOLARIS_ADDDIR_NAME_ISA := $(SOLARIS_ADDDIR_NAME_64) + SOLARIS_VBOXADDINST_DIR_ISA := $(SOLARIS_VBOXADDINST_DIR_64) + SOLARIS_ADD_DRIVERINST_DIR_ISA := $(SOLARIS_ADD_DRIVERINST_DIR_64) + SOLARIS_ADD_SYSLIBINST_DIR_ISA := $(SOLARIS_ADD_SYSLIBINST_DIR_64) +endif ifeq ($(KBUILD_TYPE),debug) BIN_COPY := $(CP) -f @@ -47,9 +86,310 @@ else VBOX_COMPRESS := compress -f endif -PACKING += $(PATH_BIN)/additions/$(PKGFILENAME) -OTHER_CLEAN += $(PACKING) +INSTALLS += solaris-addcommon solaris-addcommonbins +PROGRAMS += VBoxAddISAExec +PACKING += $(PATH_BIN)/additions/$(PKGFILENAME) +OTHER_CLEAN += $(PACKING) + +# +# VBoxAddISAExec +# +VBoxAddISAExec_TEMPLATE = VBOXR3EXE +VBoxAddISAExec_NAME = VBoxISAExec +VBoxAddISAExec_INST = $(INST_ADDITIONS) +VBoxAddISAExec_DEPS = $(VBOX_SVN_REV_KMK) +VBoxAddISAExec_SOURCES = $(PATH_ROOT)/src/VBox/Installer/solaris/VBoxISAExec.c + +# +# Install to $(PATH_BIN)/additions/ files from various source paths (to pack them using rules) +# +solaris-addcommonbins_INST = bin/additions/ +solaris-addcommonbins_MODE = a+rx,u+w +solaris-addcommonbins_SOURCES = \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.sh \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/x11config.pl \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/x11config15sol.pl \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/x11restore.pl \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/VBoxRandR.sh \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/98vboxadd-xclient=>1099.vboxclient \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/solaris_xorg.conf \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/solaris_xorg_modeless.conf \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/VBox.sh + +solaris-addcommon_INST = bin/additions/ +solaris-addcommon_MODE = a+r,u+w +solaris-addcommon_SOURCES = \ + $(PATH_ROOT)/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.conf=>vboxguest.conf \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/vboxclient.desktop \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxservice.xml + +# +# Create full directory tree +# +BLDDIRS += \ + $(SOLARIS_ADDINST_OUT_DIR) \ + $(addprefix $(SOLARIS_ADDINST_OUT_DIR)/,\ + opt \ + opt/VirtualBoxAdditions \ + opt/VirtualBoxAdditions/$(SOLARIS_ADDDIR_NAME_32) \ + opt/VirtualBoxAdditions/$(SOLARIS_ADDDIR_NAME_64) \ + usr \ + usr/bin \ + usr/lib \ + usr/lib/amd64 \ + usr/kernel \ + usr/kernel/drv \ + usr/kernel/drv/amd64 \ + var \ + var/svc \ + var/svc/manifest \ + var/svc/manifest/system \ + var/svc/manifest/system/virtualbox \ + ) + +SOLARIS_ADD_STRIP_BINS = \ + VBoxClient \ + VBoxService \ + VBoxControl \ + vboxfsmount \ + vboxfs \ + $(if $(VBOX_OSE),,vboxfs_s10) + +SOLARIS_ADD_SYSLIBS = \ + VBoxOGL.so \ + VBoxOGLcrutil.so \ + VBoxOGLfeedbackspu.so \ + VBoxOGLpassthroughspu.so \ + VBoxOGLarrayspu.so \ + VBoxOGLerrorspu.so \ + VBoxOGLpackspu.so + +SOLARIS_ADD_DRIVERS = \ + vboxguest + +SOLARIS_ADD_DRIVERS_CONF = \ + vboxguest.conf + +SOLARIS_ADD_XORG_DRIVERS = \ + vboxmouse_drv_14.so \ + vboxmouse_drv_15.so \ + vboxmouse_drv_16.so \ + vboxmouse_drv_17.so \ + vboxmouse_drv_70.so \ + vboxmouse_drv_71.so \ + vboxvideo_drv_13.so \ + vboxvideo_drv_14.so \ + vboxvideo_drv_15.so \ + vboxvideo_drv_16.so \ + vboxvideo_drv_17.so \ + vboxvideo_drv_70.so \ + vboxvideo_drv_71.so + +SOLARIS_ADD_COMMON_BINS = \ + vboxguest.sh \ + x11config.pl \ + x11config15sol.pl \ + x11restore.pl \ + VBoxRandR.sh \ + VBox.sh \ + 1099.vboxclient \ + VBoxISAExec + +SOLARIS_ADD_USRBIN_LINKS = \ + VBoxService \ + VBoxClient \ + VBoxControl + +SOLARIS_ADD_COMMON = \ + vboxclient.desktop \ + solaris_xorg.conf \ + solaris_xorg_modeless.conf + +SOLARIS_ADD_SERVICES = \ + vboxservice.xml + +ifdef VBOX_COMPRESS + SOLARIS_ADD_COMPRESS_FILES = \ + $(SOLARIS_ADD_XORG_DRIVERS) \ + VBoxService \ + VBoxClient \ + VBoxControl +endif + +ifdef VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE + SOLARIS_ARCH_ADD_DEPFILES = \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR_64)/,$(SOLARIS_ADD_STRIP_BINS)) \ + $(addprefix $(SOLARIS_ADD_SYSLIBINST_DIR_32)/,$(SOLARIS_ADD_SYSLIBS)) \ + $(addprefix $(SOLARIS_ADD_DRIVERINST_DIR_64)/,$(SOLARIS_ADD_DRIVERS)) \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR_64)/,$(SOLARIS_ADD_XORG_DRIVERS)) \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR_32)/,$(SOLARIS_ADD_STRIP_BINS)) \ + $(addprefix $(SOLARIS_ADD_DRIVERINST_DIR_32)/,$(SOLARIS_ADD_DRIVERS)) \ + $(addprefix $(SOLARIS_ADD_DRIVERINST_DIR)/,$(SOLARIS_ADD_DRIVERS_CONF)) \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR_32)/,$(SOLARIS_ADD_XORG_DRIVERS)) +else + SOLARIS_ARCH_ADD_DEPFILES = \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR_ISA)/,$(SOLARIS_ADD_STRIP_BINS)) \ + $(addprefix $(SOLARIS_ADD_SYSLIBINST_DIR_ISA)/,$(SOLARIS_ADD_SYSLIBS)) \ + $(addprefix $(SOLARIS_ADD_DRIVERINST_DIR_ISA)/,$(SOLARIS_ADD_DRIVERS)) \ + $(addprefix $(SOLARIS_ADD_DRIVERINST_DIR)/,$(SOLARIS_ADD_DRIVERS_CONF)) \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR_ISA)/,$(SOLARIS_ADD_XORG_DRIVERS)) +endif + +SOLARIS_ARCH_ADD_DEPFILES += \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR)/,$(SOLARIS_ADD_COMMON_BINS)) \ + $(addprefix $(SOLARIS_VBOXADDINST_DIR)/,$(SOLARIS_ADD_COMMON)) \ + $(addprefix $(SOLARIS_ADD_SERVICESINST_DIR)/,$(SOLARIS_ADD_SERVICES)) \ + $(addprefix $(SOLARIS_ADD_USRBIN_DIR)/,$(SOLARIS_ADD_USRBIN_LINKS)) + + + +include $(KBUILD_PATH)/subfooter.kmk + +# +# -=-=-=-=-=-=-=- Additions package -=-=-=-=-=-=-=- +# + +$(PATH_BIN)/additions/$(PKGFILENAME): \ + $(VBOX_VERSION_STAMP) \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/makepackage.sh \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/postinstall.sh \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/preremove.sh \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.pkginfo \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.depend \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.sh \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxservice.xml \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/VBox.sh \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/98vboxadd-xclient \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/x11config.pl \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/x11config15sol.pl \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/x11restore.pl \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/solaris_xorg.conf \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/solaris_xorg_modeless.conf \ + $(VBOX_PATH_X11_ADDITION_INSTALLER)/VBoxRandR.sh \ + $(if $(VBOX_OSE),,$(VBOX_BRAND_LICENSE_TXT)) \ + $(PATH_ROOT)/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.conf \ + $(PATH_SUB_CURRENT)/solaris/Makefile.kmk \ + $(SOLARIS_ARCH_ADD_DEPFILES) + $(call MSG_L1,Installing guest additions) + $(QUIET)$(SED) \ + -e "s/@VBOX_VERSION_STRING@/$(VBOX_VERSION_STRING)/g" \ + -e "s/@VBOX_SVN_REV@/$(VBOX_SVN_REV)/g" \ + -e "s/@VBOX_VERSION_REVSTAMP@/$(PKGINFO_REVSTAMP)/g" \ + -e "s/@UNAME_P@/$(PKGINFO_ARCH)/g" \ + --output $(SOLARIS_ADDINST_OUT_DIR)/vboxguest.pkginfo \ + $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.pkginfo + $(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/makepackage.sh $(SOLARIS_ADDINST_OUT_DIR)/makepackage.sh + $(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/postinstall.sh $(SOLARIS_ADDINST_OUT_DIR)/postinstall.sh + $(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/preremove.sh $(SOLARIS_ADDINST_OUT_DIR)/preremove.sh + $(QUIET)$(INSTALL) -m 0644 $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.space $(SOLARIS_ADDINST_OUT_DIR)/vboxguest.space + $(QUIET)$(INSTALL) -m 0644 $(VBOX_PATH_SOLARIS_ADDITION_INSTALLER)/vboxguest.depend $(SOLARIS_ADDINST_OUT_DIR)/vboxguest.depend + $(QUIET)$(if $(VBOX_OSE),,$(INSTALL) -m 0644 $(VBOX_BRAND_LICENSE_TXT) $(SOLARIS_ADDINST_OUT_DIR)/vboxguest.copyright) + $(call MSG_L1,Creating install package: $@) + $(QUIET)$(MKDIR) -p $(SOLARIS_ADD_ETCFS_DIR) + $(QUIET)$(LN_SYMLINK) -f ../..$(SOLARIS_VBOXADDINST_SUBDIR)/VBoxRandR.sh $(SOLARIS_ADD_USRBIN_DIR)/VBoxRandR + $(QUIET)$(LN_SYMLINK) -f ../..$(SOLARIS_VBOXADDINST_SUBDIR)/1099.vboxclient $(SOLARIS_ADD_USRBIN_DIR)/VBoxClient-all +ifdef VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE + ifdef VBOX_COMPRESS + $(QUIET)$(VBOX_COMPRESS) $(addprefix $(SOLARIS_VBOXADDINST_DIR_32)/,$(SOLARIS_ADD_COMPRESS_FILES)) + $(QUIET)$(VBOX_COMPRESS) $(addprefix $(SOLARIS_VBOXADDINST_DIR_64)/,$(SOLARIS_ADD_COMPRESS_FILES)) + endif + $(QUIET)$(LN_SYMLINK) -f ../../..$(SOLARIS_VBOXADDINST_SUBDIR)/$(SOLARIS_ADDDIR_NAME_32)/vboxfsmount $(SOLARIS_ADD_ETCFS_DIR)/mount +else # !VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE + ifdef VBOX_COMPRESS + $(QUIET)$(VBOX_COMPRESS) $(addprefix $(SOLARIS_VBOXADDINST_DIR_ISA)/,$(SOLARIS_ADD_COMPRESS_FILES)) + endif + $(LN_SYMLINK) -f ../../..$(SOLARIS_VBOXADDINST_SUBDIR)/$(SOLARIS_ADDDIR_NAME_ISA)/vboxfsmount $(SOLARIS_ADD_ETCFS_DIR)/mount +endif + $(QUIET)$(SOLARIS_ADDINST_OUT_DIR)/makepackage.sh $(SOLARIS_ADDINST_OUT_DIR) $(PKGFILENAME) $(VBOX_SVN_REV) + $(QUIET)$(INSTALL) -m 0644 $(SOLARIS_ADDINST_OUT_DIR)/$(PKGFILENAME) $(PATH_BIN)/additions/$(PKGFILENAME) + + + +# +# -=-=-=-=-=-=-=- Package rules -=-=-=-=-=-=-=- +# + +# +# 32-bit files +# +$(addprefix $(SOLARIS_VBOXADDINST_DIR_32)/,$(SOLARIS_ADD_STRIP_BINS)): \ + $(SOLARIS_VBOXADDINST_DIR_32)/% : $(SOLARIS_ADD_OUT_BIN_32)/% | $$(dir $$@) + $(INSTALL) -m 0755 $(if $(VBOX_DO_STRIP),-s,) $< $@ + +$(addprefix $(SOLARIS_ADD_SYSLIBINST_DIR_32)/,$(SOLARIS_ADD_SYSLIBS)): \ + $(SOLARIS_ADD_SYSLIBINST_DIR_32)/% : $(SOLARIS_ADD_OUT_BIN_32)/% | $$(dir $$@) + $(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s,) $< $@ + +$(addprefix $(SOLARIS_ADD_DRIVERINST_DIR_32)/,$(SOLARIS_ADD_DRIVERS)): \ + $(SOLARIS_ADD_DRIVERINST_DIR_32)/% : $(SOLARIS_ADD_OUT_BIN_32)/% | $$(dir $$@) + $(INSTALL) -m 0644 $< $@ + +$(addprefix $(SOLARIS_VBOXADDINST_DIR_32)/,$(SOLARIS_ADD_XORG_DRIVERS)): \ + $(SOLARIS_VBOXADDINST_DIR_32)/% : $(SOLARIS_ADD_OUT_BIN_32)/% | $$(dir $$@) + $(BIN_COPY) $< $@ + + +# +# 64-bit files +# +$(addprefix $(SOLARIS_VBOXADDINST_DIR_64)/,$(SOLARIS_ADD_STRIP_BINS)): \ + $(SOLARIS_VBOXADDINST_DIR_64)/% : $(SOLARIS_ADD_OUT_BIN_64)/% | $$(dir $$@) + $(INSTALL) -m 0755 $(if $(VBOX_DO_STRIP),-s,) $< $@ + +$(addprefix $(SOLARIS_ADD_SYSLIBINST_DIR_64)/,$(SOLARIS_ADD_SYSLIBS)): \ + $(SOLARIS_ADD_SYSLIBINST_DIR_64)/% : $(SOLARIS_ADD_OUT_BIN_64)/% | $$(dir $$@) + $(INSTALL) -m 0644 $(if $(VBOX_DO_STRIP),-s,) $< $@ + +$(addprefix $(SOLARIS_ADD_DRIVERINST_DIR_64)/,$(SOLARIS_ADD_DRIVERS)): \ + $(SOLARIS_ADD_DRIVERINST_DIR_64)/% : $(SOLARIS_ADD_OUT_BIN_64)/% | $$(dir $$@) + $(INSTALL) -m 0644 $< $@ + +$(addprefix $(SOLARIS_VBOXADDINST_DIR_64)/,$(SOLARIS_ADD_XORG_DRIVERS)): \ + $(SOLARIS_VBOXADDINST_DIR_64)/% : $(SOLARIS_ADD_OUT_BIN_64)/% | $$(dir $$@) + $(BIN_COPY) $< $@ + + +# +# Common files +# +$(addprefix $(SOLARIS_VBOXADDINST_DIR)/,$(SOLARIS_ADD_COMMON)): \ + $(SOLARIS_VBOXADDINST_DIR)/% : $(SOLARIS_ADD_OUT_BIN_ISA)/% | $$(dir $$@) + $(INSTALL) -m 0644 $< $@ + +# +# Common binaries/shell scripts +# +$(addprefix $(SOLARIS_VBOXADDINST_DIR)/,$(SOLARIS_ADD_COMMON_BINS)): \ + $(SOLARIS_VBOXADDINST_DIR)/% : $(SOLARIS_ADD_OUT_BIN_ISA)/% | $$(dir $$@) + $(INSTALL) -m 0755 $< $@ +# +# Driver .conf files +# +$(addprefix $(SOLARIS_ADD_DRIVERINST_DIR)/,$(SOLARIS_ADD_DRIVERS_CONF)): \ + $(SOLARIS_ADD_DRIVERINST_DIR)/% : $(SOLARIS_ADD_OUT_BIN_ISA)/% | $$(dir $$@) + $(INSTALL) -m 0644 $< $@ + +# +# SMF Service files +# +$(addprefix $(SOLARIS_ADD_SERVICESINST_DIR)/,$(SOLARIS_ADD_SERVICES)): \ + $(SOLARIS_ADD_SERVICESINST_DIR)/% : $(SOLARIS_ADD_OUT_BIN_ISA)/% | $$(dir $$@) + $(INSTALL) -m 0644 $< $@ + +# +# Symlinks from /usr/bin/ to /opt/VirtualBoxAdditions (some like VBoxRandR created manually) +# +$(addprefix $(SOLARIS_ADD_USRBIN_DIR)/,$(SOLARIS_ADD_USRBIN_LINKS)): \ + $(SOLARIS_ADD_USRBIN_DIR)/% : % | $$(dir $$@) + $(LN_SYMLINK) -f ../..$(SOLARIS_VBOXADDINST_SUBDIR)/$< $@ + + + +# +# @todo Delete once the new packaging works +# +ifdef OBSOLETE_PACKAGING # # If we are doing a combined package (x86+amd64) include the binaries from both # architectures otherwise use the one from $(PATH_BIN)/additions @@ -345,3 +685,5 @@ endif # !VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE $(QUIET)$(SOLARIS_ADD_INST_DIR)/makepackage.sh $(SOLARIS_ADD_INST_DIR) $(PKGFILENAME) $(VBOX_SVN_REV) $(QUIET)$(INSTALL) -m 0644 $(SOLARIS_ADD_INST_DIR)/$(PKGFILENAME) $(PATH_BIN)/additions/$(PKGFILENAME) +endif + diff --git a/src/VBox/Additions/x11/VBoxClient/Makefile.kmk b/src/VBox/Additions/x11/VBoxClient/Makefile.kmk index cd7c1e30e..d2bb59edb 100644 --- a/src/VBox/Additions/x11/VBoxClient/Makefile.kmk +++ b/src/VBox/Additions/x11/VBoxClient/Makefile.kmk @@ -43,11 +43,14 @@ VBoxClient_LIBPATH = \ $(VBOX_LIBPATH32_X11) VBoxClient_LIBS.freebsd = \ iconv +VBoxClient_LIBS.linux = \ + dl +VBoxClient_LIBS.solaris = \ + dl VBoxClient_LIBS = \ $(VBOX_LIB_IPRT_GUEST_R3) \ $(VBOX_LIB_VBGL_R3) \ $(VBOX_LIB_IPRT_GUEST_R3) \ - dl \ X11 \ Xt # These are static replacements for gcc-specific parts of libstdc++ diff --git a/src/VBox/Additions/x11/vboxmouse/Imakefile b/src/VBox/Additions/x11/vboxmouse/Imakefile deleted file mode 100644 index c159569f2..000000000 --- a/src/VBox/Additions/x11/vboxmouse/Imakefile +++ /dev/null @@ -1,48 +0,0 @@ -XCOMM -XCOMM Imakefile for the VBox Linux Additions X.org mouse driver. -XCOMM (Only needed if this module is compiled as part of monolithic Xorg) -XCOMM -XCOMM -XCOMM Copyright (C) 2006-2007 Sun Microsystems, Inc. -XCOMM -XCOMM This file is part of VirtualBox Open Source Edition (OSE), as -XCOMM available from http://www.virtualbox.org. This file is free software; -XCOMM you can redistribute it and/or modify it under the terms of the GNU -XCOMM General Public License (GPL) as published by the Free Software -XCOMM Foundation, in version 2 as it comes in the "COPYING" file of the -XCOMM VirtualBox OSE distribution. VirtualBox OSE is distributed in the -XCOMM hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. -XCOMM -XCOMM Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa -XCOMM Clara, CA 95054 USA or visit http://www.sun.com if you need -XCOMM additional information or have any questions. -XCOMM - -#define IHaveModules -#include - -SRCS = mouse.c pnp.c VBoxUtils.c -OBJS = mouse.o pnp.o VBoxUtils.o - -DRIVER = vboxmouse - -INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86SRC)/loader -I$(XF86OSSRC) \ - -I$(SERVERSRC)/mi -I$(SERVERSRC)/include -I$(XINCLUDESRC) \ - -I$(EXTINCSRC) - -DEFINES = -DPNP_MOUSE -DIN_RING3 -DVBOX -CCOPTIONS += -fno-merge-constants - -#if MakeHasPosixVariableSubstitutions -SubdirLibraryRule($(OBJS)) -#endif - -ModuleObjectRule() - -ObjectModuleTarget($(DRIVER),$(OBJS)) - -InstallInputObjectModule($(DRIVER),$(MODULEDIR)) - -DependTarget() - -InstallDriverSDKObjectModule($(DRIVER),$(DRIVERSDKMODULEDIR),input) diff --git a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk index 31ab104cf..2d6d42a27 100644 --- a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk +++ b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk @@ -31,6 +31,9 @@ if1of ($(KBUILD_TARGET), linux) vboxmouse_drv_TEMPLATE = VBOXGUESTR3XF86MOD vboxmouse_drv_DEFS.linux = linux vboxmouse_drv_DEFS.x86 += __i386__ + # This one has to be defined when building server code on systems where + # unslgned long is 64bits + vboxmouse_drv_DEFS.amd64 += _XSERVER64 vboxmouse_drv_DEFS += \ _POSIX_C_SOURCE=199309L _POSIX_SOURCE _XOPEN_SOURCE \ _BSD_SOURCE _SVID_SOURCE _GNU_SOURCE SHAPE XINPUT XKB LBX XAPPGROUP \ @@ -40,16 +43,15 @@ if1of ($(KBUILD_TARGET), linux) BUILDDEBUG X_BYTE_ORDER=X_LITTLE_ENDIAN DNDEBUG FUNCPROTO=15 NARROWPROTO \ IN_MODULE XFree86Module PNP_MOUSE vboxmouse_drv_INCS := \ - $(VBOX_PATH_X11_XFREE_4_2)/exports/include \ - $(VBOX_PATH_X11_XFREE_4_2)/exports/include/X11 \ - $(VBOX_PATH_X11_XFREE_4_2)/include \ - $(VBOX_PATH_X11_XFREE_4_2)/include/extensions \ - $(VBOX_PATH_X11_XFREE_4_2)/programs/Xserver/include \ - $(VBOX_PATH_X11_XFREE_4_2)/programs/Xserver/hw/xfree86 \ - $(VBOX_PATH_X11_XFREE_4_2)/programs/Xserver/hw/xfree86/common \ - $(VBOX_PATH_X11_XFREE_4_2)/programs/Xserver/hw/xfree86/os-support \ - $(VBOX_PATH_X11_XFREE_4_2)/programs/Xserver/hw/xfree86/os-support/bus \ - $(VBOX_PATH_X11_XFREE_4_2)/programs/Xserver/mi \ + $(VBOX_PATH_X11_XFREE_4_3)/include \ + $(VBOX_PATH_X11_XFREE_4_3)/include/extensions \ + $(VBOX_PATH_X11_XFREE_4_3)/include/X11 \ + $(VBOX_PATH_X11_XFREE_4_3)/programs/Xserver/hw/xfree86 \ + $(VBOX_PATH_X11_XFREE_4_3)/programs/Xserver/hw/xfree86/common \ + $(VBOX_PATH_X11_XFREE_4_3)/programs/Xserver/hw/xfree86/os-support \ + $(VBOX_PATH_X11_XFREE_4_3)/programs/Xserver/hw/xfree86/os-support/bus \ + $(VBOX_PATH_X11_XFREE_4_3)/programs/Xserver/mi \ + $(VBOX_PATH_X11_XFREE_4_3)/programs/Xserver/include \ $(PATH_SUB_CURRENT) vboxmouse_drv_SOURCES = \ mouse.c \ diff --git a/src/VBox/Additions/x11/vboxmouse/mouse.c b/src/VBox/Additions/x11/vboxmouse/mouse.c index 295d430ff..beb85b374 100644 --- a/src/VBox/Additions/x11/vboxmouse/mouse.c +++ b/src/VBox/Additions/x11/vboxmouse/mouse.c @@ -604,6 +604,7 @@ MousePreInit(InputDriverPtr drv, IDevPtr dev, int flags) { InputInfoPtr pInfo; MouseDevPtr pMse; + Bool clearDTR, clearRTS; MessageType from = X_DEFAULT; const char *protocol; MouseProtocolID protocolID; @@ -747,16 +748,20 @@ MousePreInit(InputDriverPtr drv, IDevPtr dev, int flags) pMse->resolution); } - pMse->clearDTR = xf86SetBoolOption(pInfo->options, "ClearDTR", FALSE); - pMse->clearRTS = xf86SetBoolOption(pInfo->options, "ClearRTS", FALSE); - if (pMse->clearDTR || pMse->clearRTS) { + if ((clearDTR = xf86SetBoolOption(pInfo->options, "ClearDTR", FALSE))) + pMse->mouseFlags |= MF_CLEAR_DTR; + + if ((clearRTS = xf86SetBoolOption(pInfo->options, "ClearRTS", FALSE))) + pMse->mouseFlags |= MF_CLEAR_RTS; + + if (clearDTR || clearRTS) { xf86Msg(X_CONFIG, "%s: ", pInfo->name); - if (pMse->clearDTR) { + if (clearDTR) { xf86ErrorF("ClearDTR"); - if (pMse->clearRTS) + if (clearRTS) xf86ErrorF(", "); } - if (pMse->clearRTS) { + if (clearRTS) { xf86ErrorF("ClearRTS"); } xf86ErrorF("\n"); diff --git a/src/VBox/Additions/x11/vboxmouse/undefined_15 b/src/VBox/Additions/x11/vboxmouse/undefined_15 index 51071d837..0bb170010 100644 --- a/src/VBox/Additions/x11/vboxmouse/undefined_15 +++ b/src/VBox/Additions/x11/vboxmouse/undefined_15 @@ -91,3 +91,4 @@ miPointerGetMotionEvents miPointerGetMotionBufferSize miPointerCurrentScreen screenInfo +InitPointerDeviceStruct diff --git a/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c b/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c index 3c9b0e9b7..023a91664 100644 --- a/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c +++ b/src/VBox/Additions/x11/vboxmouse/vboxmouse_15.c @@ -76,8 +76,8 @@ VBoxReadInput(InputInfoPtr pInfo) #if ABI_XINPUT_VERSION == SET_ABI_VERSION(2, 0) /* Bug in the 1.4 X server series - conversion_proc was no longer * called, but the server didn't yet do the conversion itself. */ - cx = xf86ScaleAxis(cx, 0, screenInfo.screens[0]->width, 0, 65536); - cy = xf86ScaleAxis(cy, 0, screenInfo.screens[0]->height, 0, 65536); + cx = (cx * screenInfo.screens[0]->width) / 65535; + cy = (cy * screenInfo.screens[0]->height) / 65535; #endif /* send absolute movement */ xf86PostMotionEvent(pInfo->dev, 1, 0, 2, cx, cy); @@ -95,35 +95,27 @@ VBoxInit(DeviceIntPtr device) CARD8 map[2] = { 0, 1 }; Atom axis_labels[2] = { 0, 0 }; Atom button_labels[2] = { 0, 0 }; - InputInfoPtr pInfo; - - pInfo = device->public.devicePrivate; - if (!InitValuatorClassDeviceStruct(device, 2, + if (!InitPointerDeviceStruct((DevicePtr)device, map, 2, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + button_labels, +#endif #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 2 - miPointerGetMotionEvents, - miPointerGetMotionBufferSize(), + miPointerGetMotionEvents, VBoxPtrCtrlProc, + miPointerGetMotionBufferSize() #elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3 - GetMotionHistory, - GetMotionHistorySize(), -#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 7 - GetMotionHistorySize(), -#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 - axis_labels, - GetMotionHistorySize(), + GetMotionHistory, VBoxPtrCtrlProc, + GetMotionHistorySize(), 2 /* Number of axes */ + +#elif GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 3 + VBoxPtrCtrlProc, GetMotionHistorySize(), + 2 /* Number of axes */ #else # error Unsupported version of X.Org #endif - Absolute)) - return !Success; - - /* Pretend we have buttons so the server accepts us as a pointing device. */ - if (!InitButtonClassDeviceStruct(device, 2, /* number of buttons */ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 - button_labels, + , axis_labels #endif - map)) - return !Success; - if (!InitPtrFeedbackClassDeviceStruct(device, VBoxPtrCtrlProc)) + )) return !Success; /* Tell the server about the range of axis values we report */ @@ -147,7 +139,7 @@ VBoxInit(DeviceIntPtr device) #endif xf86InitValuatorDefaults(device, 0); xf86InitValuatorDefaults(device, 1); - xf86MotionHistoryAllocate(pInfo); + xf86MotionHistoryAllocate(device->public.devicePrivate); return Success; } diff --git a/src/VBox/Additions/x11/vboxvideo/Imakefile b/src/VBox/Additions/x11/vboxvideo/Imakefile deleted file mode 100644 index 0cf18bcd4..000000000 --- a/src/VBox/Additions/x11/vboxvideo/Imakefile +++ /dev/null @@ -1,65 +0,0 @@ -XCOMM -XCOMM Imakefile for the VBox Linux Additions X.org graphics driver. -XCOMM (Only needed if this module is compiled as part of monolithic Xorg) -XCOMM -XCOMM -XCOMM -XCOMM Copyright (C) 2006-2007 Sun Microsystems, Inc. -XCOMM -XCOMM This file is part of VirtualBox Open Source Edition (OSE), as -XCOMM available from http://www.virtualbox.org. This file is free software; -XCOMM you can redistribute it and/or modify it under the terms of the GNU -XCOMM General Public License (GPL) as published by the Free Software -XCOMM Foundation, in version 2 as it comes in the "COPYING" file of the -XCOMM VirtualBox OSE distribution. VirtualBox OSE is distributed in the -XCOMM hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. -XCOMM -XCOMM Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa -XCOMM Clara, CA 95054 USA or visit http://www.sun.com if you need -XCOMM additional information or have any questions. -XCOMM - - -#define IHaveModules -#include - -SRCS = vboxvideo.c vboxutils.c -OBJS = vboxvideo.o vboxutils.o - -DRIVER = vboxvideo - -#if defined(XF86DriverSDK) -INCLUDES = -I. -I../../include -#else -INCLUDES = -I. -I$(SERVERSRC)/fb -I$(XF86SRC)/xf4bpp -I$(XF86SRC)/xf1bpp \ - -I$(SERVERSRC)/mfb -I$(SERVERSRC)/afb -I$(SERVERSRC)/mi \ - -I$(SERVERSRC)/miext/shadow -I$(SERVERSRC)/render \ - -I$(XF86SRC)/vgahw \ - -I$(XF86COMSRC) -I$(XF86OSSRC) -I$(SERVERSRC)/Xext \ - -I$(SERVERSRC)/include -I$(FONTINCSRC) -I$(XINCLUDESRC)\ - -I$(XF86SRC)/rac -I$(XF86SRC)/ramdac -I$(XF86SRC)/ddc -I$(XF86SRC)/i2c \ - -I$(XF86SRC)/vbe -I$(XF86SRC)/int10 \ - -I$(EXTINCSRC) -#endif - -DEFINES = -DVBOX -DIN_RING3 -DXORG_7X -CCOPTIONS += -fno-merge-constants - -#if MakeHasPosixVariableSubstitutions -SubdirLibraryRule($(OBJS)) -#endif - -ModuleObjectRule() - -ObjectModuleTarget($(DRIVER),$(OBJS)) - -InstallVideoObjectModule($(DRIVER),$(MODULEDIR)) - -DependTarget() - -InstallDriverSDKNonExecFile(Imakefile,$(DRIVERSDKDIR)/drivers/vboxvideo) -InstallDriverSDKNonExecFile(vboxvideo.c,$(DRIVERSDKDIR)/drivers/vboxvideo) -InstallDriverSDKNonExecFile(vboxvideo.h,$(DRIVERSDKDIR)/drivers/vboxvideo) -InstallDriverSDKNonExecFile(vboxutils.c,$(DRIVERSDKDIR)/drivers/vboxvideo) - -InstallDriverSDKObjectModule($(DRIVER),$(DRIVERSDKMODULEDIR),drivers) diff --git a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk index 2fbb3d1f6..43b57c75b 100644 --- a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk +++ b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk @@ -30,7 +30,10 @@ if1of ($(KBUILD_TARGET), linux) vboxvideo_drv_TEMPLATE = VBOXGUESTR3XF86MOD vboxvideo_drv_DEFS.linux = linux vboxvideo_drv_DEFS.x86 = __i386__ - vboxvideo_drv_DEFS = \ + # This one has to be defined when building server code on systems where + # unslgned long is 64bits + vboxvideo_drv_DEFS.amd64 += _XSERVER64 +vboxvideo_drv_DEFS = \ _POSIX_C_SOURCE=199309L _POSIX_SOURCE _XOPEN_SOURCE \ _BSD_SOURCE _SVID_SOURCE _GNU_SOURCE SHAPE XINPUT XKB LBX XAPPGROUP \ XCSECURITY TOGCUP XF86BIGFONT DPMSExtension PIXPRIV PANORAMIX RENDER \ diff --git a/src/VBox/Additions/x11/vboxvideo/undefined_68 b/src/VBox/Additions/x11/vboxvideo/undefined_68 index 6b36dcb1b..4fc93af03 100644 --- a/src/VBox/Additions/x11/vboxvideo/undefined_68 +++ b/src/VBox/Additions/x11/vboxvideo/undefined_68 @@ -74,3 +74,5 @@ xf86errno xf86CreateCursorInfoRec resVgaShared xf86SetBackingStore +xf86snprintf +XNFstrdup diff --git a/src/VBox/Additions/x11/vboxvideo/vboxutils_68.c b/src/VBox/Additions/x11/vboxvideo/vboxutils_68.c index b1a2699e5..020f5ecb4 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxutils_68.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxutils_68.c @@ -944,40 +944,51 @@ vboxDisableVbva(ScrnInfoPtr pScrn) return TRUE; } - /** * Query the last display change request. * - * @returns iprt status value - * @param xres where to store the horizontal pixel resolution requested - * (0 = do not change) - * @param yres where to store the vertical pixel resolution requested - * (0 = do not change) - * @param bpp where to store the bits per pixel requeste - * (0 = do not change) - * @param display Where to store the display number the request was for - - * 0 for the primary display, 1 for the first secondary, etc. + * @returns boolean success indicator. + * @param pScrn Pointer to the X screen info structure. + * @param pcx Where to store the horizontal pixel resolution (0 = do not change). + * @param pcy Where to store the vertical pixel resolution (0 = do not change). + * @param pcBits Where to store the bits per pixel (0 = do not change). + * @param fEventAck Flag that the request is an acknowlegement for the + * VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST. + * Values: + * 0 - just querying, + * VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST - event acknowledged. + * @param iDisplay 0 for primary display, 1 for the first secondary, etc. */ Bool -vboxGetDisplayChangeRequest(ScrnInfoPtr pScrn, uint32_t *px, uint32_t *py, - uint32_t *pbpp, uint32_t *display) +vboxGetDisplayChangeRequest(ScrnInfoPtr pScrn, uint32_t *pcx, uint32_t *pcy, + uint32_t *pcBits, uint32_t fEventAck, uint32_t iDisplay) { - int rc, scrnIndex = pScrn->scrnIndex; - VBOXPtr pVBox = pScrn->driverPrivate; + VMMDevDisplayChangeRequest2 req; + int rc; + int fd; - VMMDevDisplayChangeRequest2 Req = { { 0 } }; - vmmdevInitRequest(&Req.header, VMMDevReq_GetDisplayChangeRequest2); - rc = vbox_vmmcall(pScrn, pVBox, &Req.header); - if (RT_SUCCESS(rc)) - { - *px = Req.xres; - *py = Req.yres; - *pbpp = Req.bpp; - *display = Req.display; - return TRUE; - } - xf86DrvMsg(scrnIndex, X_ERROR, - "Failed to request the last resolution requested from the guest, rc=%d.\n", - rc); - return FALSE; + req.eventAck = fEventAck; + req.display = iDisplay; + + rc = vmmdevInitRequest ((VMMDevRequestHeader*)&req, VMMDevReq_GetDisplayChangeRequest2); + if (VBOX_FAILURE (rc)) + return FALSE; + + /* open VBOXGUEST_DEVICE_NAME temporarily as we didn't call vbox_open yet when we enter + * this function */ + fd = open (VBOXGUEST_DEVICE_NAME, O_RDWR, 0); + if (fd < 0) + return FALSE; + if (ioctl(fd, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(req)), (void*)&req) < 0) + return FALSE; + close (fd); + + rc = req.header.rc; + if (RT_FAILURE(rc)) + return FALSE; + + *pcx = req.xres; + *pcy = req.yres; + *pcBits = req.bpp; + return TRUE; } diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h index a4ca18dd7..a98625810 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h @@ -194,8 +194,7 @@ typedef struct _VBOXRec PCITAG pciTag; #endif CARD16 maxBytesPerScanline; - unsigned long mapPhys, mapOff; - int mapSize; /* video memory */ + unsigned long mapPhys, mapOff, mapSize; /* video memory */ void *base, *VGAbase; CARD8 *state, *pstate; /* SVGA state */ int statePage, stateSize, stateMode; diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo_13.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo_13.c index 1b6a37024..ade6b0fdf 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo_13.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo_13.c @@ -345,8 +345,10 @@ vbox_output_mode_valid (xf86OutputPtr output, DisplayModePtr mode) int rc = MODE_OK; TRACE_LOG("HDisplay=%d, VDisplay=%d\n", mode->HDisplay, mode->VDisplay); /* We always like modes specified by the user in the configuration - * file, as doing otherwise is likely to annoy people. */ + * file and modes requested by the host, as doing otherwise is likely to + * annoy people. */ if ( !(mode->type & M_T_USERDEF) + && !(mode->type & M_T_PREFERRED) && vbox_device_available(VBOXGetRec(pScrn)) && !vboxHostLikesVideoMode(pScrn, mode->HDisplay, mode->VDisplay, pScrn->bitsPerPixel) diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.c index 46705811d..8816e802f 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.c +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.c @@ -369,6 +369,8 @@ VBOXPreInit(ScrnInfoPtr pScrn, int flags) ClockRange *clockRanges; int i; DisplayModePtr m_prev; + int rc, modes; + uint32_t x, y, bpp; /* Are we really starting the server, or is this just a dummy run? */ if (flags & PROBE_DETECT) @@ -475,30 +477,40 @@ VBOXPreInit(ScrnInfoPtr pScrn, int flags) xf86SetGamma(pScrn, gzeros); + /* Video mode hint passed? */ + rc = vboxGetDisplayChangeRequest(pScrn, &x, &y, &bpp, 0, 0); + if (rc && (!x || !y)) + rc = FALSE; + /* To get around the problem of SUSE specifying a single, invalid mode in their * Xorg.conf by default, we add an additional mode to the end of the user specified * list. This means that if all user modes are invalid, X will try our mode before * falling back to its standard mode list. */ if (pScrn->display->modes == NULL) { - /* The user specified no modes at all - specify 1024x768 as a default. */ - pScrn->display->modes = xnfalloc(4 * sizeof(char*)); - pScrn->display->modes[0] = "1024x768"; - pScrn->display->modes[1] = "800x600"; - pScrn->display->modes[2] = "640x480"; - pScrn->display->modes[3] = NULL; + modes = rc ? 5 : 4; + /* The user specified no modes at all - specify default modes. */ + pScrn->display->modes = xnfalloc(modes * sizeof(char*)); } else { - /* Add 1024x768 to the end of the mode list in case the others are all invalid. */ - for (i = 0; pScrn->display->modes[i] != NULL; i++); - pScrn->display->modes = xnfrealloc(pScrn->display->modes, (i + 4) - * sizeof(char *)); - pScrn->display->modes[i ] = "1024x768"; - pScrn->display->modes[i+1] = "800x600"; - pScrn->display->modes[i+2] = "640x480"; - pScrn->display->modes[i+3] = NULL; + /* Add default modes to the end of the mode list in case the others are all invalid. */ + for (i = 0; pScrn->display->modes[i] != NULL; i++) + ; + modes = rc ? i + 5 : i + 4; + pScrn->display->modes = xnfrealloc(pScrn->display->modes, + modes * sizeof(char*)); + } + if (rc) + { + char mode[32]; + snprintf(mode, sizeof(mode), "%dx%d", x, y); + pScrn->display->modes[modes - 5] = XNFstrdup(mode); } + pScrn->display->modes[modes - 4] = "1024x768"; + pScrn->display->modes[modes - 3] = "800x600"; + pScrn->display->modes[modes - 2] = "640x480"; + pScrn->display->modes[modes - 1] = NULL; /* Create a builtin mode for every specified mode. This allows to specify arbitrary * screen resolutions */ diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.h b/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.h index fbfa501a7..5aa5ac115 100644 --- a/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.h +++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo_68.h @@ -134,7 +134,7 @@ typedef struct _VBOXRec pciVideoPtr pciInfo; PCITAG pciTag; CARD16 maxBytesPerScanline; - int mapPhys, mapOff, mapSize; /* video memory */ + unsigned long mapPhys, mapOff, mapSize; /* video memory */ void *base, *VGAbase; CARD8 *state, *pstate; /* SVGA state */ int statePage, stateSize, stateMode; @@ -175,8 +175,23 @@ extern Bool vboxEnableVbva(ScrnInfoPtr pScrn); extern Bool vboxDisableVbva(ScrnInfoPtr pScrn); -extern Bool vboxGetDisplayChangeRequest(ScrnInfoPtr pScrn, uint32_t *pcx, - uint32_t *pcy, uint32_t *pcBits, - uint32_t *piDisplay); +/** + * Query the last display change request. + * + * @returns boolean success indicator. + * @param pScrn Pointer to the X screen info structure. + * @param pcx Where to store the horizontal pixel resolution (0 = do not change). + * @param pcy Where to store the vertical pixel resolution (0 = do not change). + * @param pcBits Where to store the bits per pixel (0 = do not change). + * @param fEventAck Flag that the request is an acknowlegement for the + * VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST. + * Values: + * 0 - just querying, + * VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST - event acknowledged. + * @param iDisplay 0 for primary display, 1 for the first secondary, etc. + */ +extern Bool +vboxGetDisplayChangeRequest(ScrnInfoPtr pScrn, uint32_t *pcx, uint32_t *pcy, + uint32_t *pcBits, uint32_t fEventAck, uint32_t iDisplay); #endif /* _VBOXVIDEO_H_ */ diff --git a/src/VBox/Devices/Audio/audio.c b/src/VBox/Devices/Audio/audio.c index c25f0aaec..5c17f2320 100644 --- a/src/VBox/Devices/Audio/audio.c +++ b/src/VBox/Devices/Audio/audio.c @@ -66,12 +66,12 @@ static struct audio_driver *drvtab[] = { &oss_audio_driver, #endif #ifdef RT_OS_LINUX -# ifdef VBOX_WITH_ALSA - &alsa_audio_driver, -# endif # ifdef VBOX_WITH_PULSE &pulse_audio_driver, # endif +# ifdef VBOX_WITH_ALSA + &alsa_audio_driver, +# endif #endif /* RT_OS_LINUX */ #ifdef RT_OS_DARWIN &coreaudio_audio_driver, diff --git a/src/VBox/Devices/Audio/pulse_stubs.c b/src/VBox/Devices/Audio/pulse_stubs.c index 66b71f546..859b0e82b 100644 --- a/src/VBox/Devices/Audio/pulse_stubs.c +++ b/src/VBox/Devices/Audio/pulse_stubs.c @@ -78,9 +78,12 @@ PROXY_STUB (pa_stream_get_state, pa_stream_state_t, PROXY_STUB_VOID(pa_stream_set_state_callback, (pa_stream *s, pa_stream_notify_cb_t cb, void *userdata), (s, cb, userdata)) -PROXY_STUB (pa_stream_flush, pa_operation*, +PROXY_STUB (pa_stream_drain, pa_operation*, (pa_stream *s, pa_stream_success_cb_t cb, void *userdata), (s, cb, userdata)) +PROXY_STUB (pa_stream_trigger, pa_operation*, + (pa_stream *s, pa_stream_success_cb_t cb, void *userdata), + (s, cb, userdata)) PROXY_STUB (pa_stream_new, pa_stream*, (pa_context *c, const char *name, const pa_sample_spec *ss, const pa_channel_map *map), @@ -97,9 +100,6 @@ PROXY_STUB (pa_stream_cork, pa_operation*, PROXY_STUB (pa_stream_drop, int, (pa_stream *p), (p)) -PROXY_STUB (pa_stream_trigger, pa_operation*, - (pa_stream *s, pa_stream_success_cb_t cb, void *userdata), - (s, cb, userdata)) PROXY_STUB (pa_stream_writable_size, size_t, (pa_stream *p), (p)) @@ -155,6 +155,9 @@ PROXY_STUB_VOID(pa_threaded_mainloop_lock, PROXY_STUB (pa_bytes_per_second, size_t, (const pa_sample_spec *spec), (spec)) +PROXY_STUB (pa_frame_size, size_t, + (const pa_sample_spec *spec), + (spec)) PROXY_STUB (pa_sample_format_to_string, const char*, (pa_sample_format_t f), (f)) @@ -167,9 +170,15 @@ PROXY_STUB (pa_channel_map_init_auto, pa_channel_map*, PROXY_STUB_VOID(pa_operation_unref, (pa_operation *o), (o)) +PROXY_STUB (pa_operation_get_state, pa_operation_state_t, + (pa_operation *o), + (o)) PROXY_STUB (pa_strerror, const char*, (int error), (error)) +PROXY_STUB (pa_stream_readable_size, size_t, + (pa_stream *p), + (p)) typedef struct @@ -190,13 +199,13 @@ static SHARED_FUNC SharedFuncs[] = ELEMENT(pa_stream_unref), ELEMENT(pa_stream_get_state), ELEMENT(pa_stream_set_state_callback), - ELEMENT(pa_stream_flush), + ELEMENT(pa_stream_drain), + ELEMENT(pa_stream_trigger), ELEMENT(pa_stream_new), ELEMENT(pa_stream_get_buffer_attr), ELEMENT(pa_stream_peek), ELEMENT(pa_stream_cork), ELEMENT(pa_stream_drop), - ELEMENT(pa_stream_trigger), ELEMENT(pa_stream_writable_size), ELEMENT(pa_context_connect), ELEMENT(pa_context_disconnect), @@ -215,11 +224,14 @@ static SHARED_FUNC SharedFuncs[] = ELEMENT(pa_threaded_mainloop_start), ELEMENT(pa_threaded_mainloop_lock), ELEMENT(pa_bytes_per_second), + ELEMENT(pa_frame_size), ELEMENT(pa_sample_format_to_string), ELEMENT(pa_sample_spec_valid), ELEMENT(pa_channel_map_init_auto), ELEMENT(pa_operation_unref), + ELEMENT(pa_operation_get_state), ELEMENT(pa_strerror), + ELEMENT(pa_stream_readable_size) }; #undef ELEMENT diff --git a/src/VBox/Devices/Audio/pulseaudio.c b/src/VBox/Devices/Audio/pulseaudio.c index 10f24d9eb..21596908f 100644 --- a/src/VBox/Devices/Audio/pulseaudio.c +++ b/src/VBox/Devices/Audio/pulseaudio.c @@ -48,13 +48,32 @@ static struct pa_context *g_pContext; typedef struct PulseVoice { - HWVoiceOut hw; - void *pPCMBuf; - pa_stream *pStream; - int fOpSuccess; - unsigned cErrors; + /** not accessed from within this context */ + union + { + HWVoiceOut Out; + HWVoiceIn In; + } hw; + /** DAC buffer */ + void *pPCMBuf; + /** Pulse stream */ + pa_stream *pStream; + /** Pulse sample format and attribute specification */ + pa_sample_spec SampleSpec; + /** Pulse playback and buffer metrics */ + pa_buffer_attr BufAttr; + int fOpSuccess; + /** number of logged errors */ + unsigned cErrors; + /** Pulse record peek buffer */ + const uint8_t *pu8PeekBuf; + size_t cbPeekBuf; + size_t offPeekBuf; } PulseVoice; +/* The desired buffer length in milliseconds. Will be the target total stream + * latency on newer version of pulse. Apparent latency can be less (or more.) + */ static struct { int buffer_msecs_out; @@ -66,31 +85,6 @@ static struct INIT_FIELD (.buffer_msecs_in = ) 100, }; -struct pulse_params_req -{ - int freq; - pa_sample_format_t pa_format; - int nchannels; -}; - -struct pulse_params_obt -{ - int freq; - pa_sample_format_t pa_format; - int nchannels; - unsigned long buffer_size; -}; - -static void pulse_check_fatal (PulseVoice *pulse, int rc) -{ - if (rc == PA_ERR_CONNECTIONTERMINATED) - { - /* XXX runtime warning */ - LogRel(("Pulse: Audio input/output stopped!\n")); - pulse->cErrors = MAX_LOG_REL_ERRORS; - } -} - static pa_sample_format_t aud_to_pulsefmt (audfmt_e fmt) { switch (fmt) @@ -154,13 +148,21 @@ static int pulse_to_audfmt (pa_sample_format_t pulsefmt, audfmt_e *fmt, int *end static void context_state_callback(pa_context *c, void *userdata) { + PulseVoice *pPulse = (PulseVoice *)userdata; switch (pa_context_get_state(c)) { case PA_CONTEXT_READY: case PA_CONTEXT_TERMINATED: + pa_threaded_mainloop_signal(g_pMainLoop, 0); + break; + case PA_CONTEXT_FAILED: + LogRel(("Pulse: Audio input/output stopped!\n")); + if (pPulse) + pPulse->cErrors = MAX_LOG_REL_ERRORS; pa_threaded_mainloop_signal(g_pMainLoop, 0); break; + default: break; } @@ -175,28 +177,19 @@ static void stream_state_callback(pa_stream *s, void *userdata) case PA_STREAM_TERMINATED: pa_threaded_mainloop_signal(g_pMainLoop, 0); break; + default: break; } } -static void stream_latency_update_callback(pa_stream *s, void *userdata) +static int pulse_open (int fIn, pa_stream **ppStream, pa_sample_spec *pSampleSpec, + pa_buffer_attr *pBufAttr) { - pa_threaded_mainloop_signal(g_pMainLoop, 0); -} - -static int pulse_open (int fIn, struct pulse_params_req *req, - struct pulse_params_obt *obt, pa_stream **ppStream) -{ - pa_sample_spec sspec; - pa_channel_map cmap; + const pa_buffer_attr *pBufAttrObtained; pa_stream *pStream = NULL; - pa_buffer_attr bufAttr; - const pa_buffer_attr *pBufAttr; - const pa_sample_spec *pSampSpec; - char achPCMName[64]; - pa_stream_flags_t flags; - int ms = fIn ? conf.buffer_msecs_in : conf.buffer_msecs_out; + char achPCMName[64]; + pa_stream_flags_t flags = 0; const char *stream_name = audio_get_stream_name(); RTStrPrintf(achPCMName, sizeof(achPCMName), "%.32s%s%s%s", @@ -204,63 +197,58 @@ static int pulse_open (int fIn, struct pulse_params_req *req, stream_name ? " (" : "", fIn ? "pcm_in" : "pcm_out", stream_name ? ")" : ""); - sspec.rate = req->freq; - sspec.channels = req->nchannels; - sspec.format = req->pa_format; LogRel(("Pulse: open %s rate=%dHz channels=%d format=%s\n", - fIn ? "PCM_IN" : "PCM_OUT", req->freq, req->nchannels, - pa_sample_format_to_string(req->pa_format))); + fIn ? "PCM_IN" : "PCM_OUT", pSampleSpec->rate, pSampleSpec->channels, + pa_sample_format_to_string(pSampleSpec->format))); - if (!pa_sample_spec_valid(&sspec)) + if (!pa_sample_spec_valid(pSampleSpec)) { LogRel(("Pulse: Unsupported sample specification\n")); goto fail; } - pa_channel_map_init_auto(&cmap, sspec.channels, PA_CHANNEL_MAP_ALSA); - -#if 0 - pa_cvolume_reset(&volume, sspec.channels); -#endif - pa_threaded_mainloop_lock(g_pMainLoop); - if (!(pStream = pa_stream_new(g_pContext, achPCMName, &sspec, &cmap))) + if (!(pStream = pa_stream_new(g_pContext, achPCMName, pSampleSpec, /*channel_map=*/NULL))) { LogRel(("Pulse: Cannot create stream %s\n", achPCMName)); goto unlock_and_fail; } - pSampSpec = pa_stream_get_sample_spec(pStream); - obt->pa_format = pSampSpec->format; - obt->nchannels = pSampSpec->channels; - obt->freq = pSampSpec->rate; - pa_stream_set_state_callback(pStream, stream_state_callback, NULL); - pa_stream_set_latency_update_callback(pStream, stream_latency_update_callback, NULL); - memset(&bufAttr, 0, sizeof(bufAttr)); - bufAttr.tlength = (pa_bytes_per_second(pSampSpec) * ms) / 1000; - bufAttr.maxlength = (bufAttr.tlength*3) / 2; - bufAttr.minreq = pa_bytes_per_second(pSampSpec) / 100; /* 10ms */ - bufAttr.prebuf = bufAttr.tlength - bufAttr.minreq; - bufAttr.fragsize = pa_bytes_per_second(pSampSpec) / 100; /* 10ms */ +#if PA_API_VERSION >= 12 + /* XXX */ + flags |= PA_STREAM_ADJUST_LATENCY; +#endif + +#if 0 + /* not applicable as we don't use pa_stream_get_latency() and pa_stream_get_time() */ + flags |= PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE; +#endif - flags = PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE; if (fIn) { - if (pa_stream_connect_record(pStream, /*dev=*/NULL, &bufAttr, flags) < 0) + LogRel(("Pulse: Requested record buffer attributes: maxlength=%d fragsize=%d\n", + pBufAttr->maxlength, pBufAttr->fragsize)); + + if (pa_stream_connect_record(pStream, /*dev=*/NULL, pBufAttr, flags) < 0) { - LogRel(("Pulse: Cannot connect record stream : %s\n", + LogRel(("Pulse: Cannot connect record stream: %s\n", pa_strerror(pa_context_errno(g_pContext)))); goto disconnect_unlock_and_fail; } } else { - if (pa_stream_connect_playback(pStream, /*dev=*/NULL, &bufAttr, flags, - NULL, NULL) < 0) + LogRel(("Pulse: Requested playback buffer attributes: maxlength=%d tlength=%d prebuf=%d minreq=%d\n", + pBufAttr->maxlength, pBufAttr->tlength, pBufAttr->prebuf, pBufAttr->minreq)); + + flags |= PA_STREAM_START_CORKED; + + if (pa_stream_connect_playback(pStream, /*dev=*/NULL, pBufAttr, flags, + /*cvolume=*/NULL, /*sync_stream=*/NULL) < 0) { LogRel(("Pulse: Cannot connect playback stream: %s\n", pa_strerror(pa_context_errno(g_pContext)))); @@ -273,6 +261,7 @@ static int pulse_open (int fIn, struct pulse_params_req *req, { pa_stream_state_t sstate; pa_threaded_mainloop_wait(g_pMainLoop); + sstate = pa_stream_get_state(pStream); if (sstate == PA_STREAM_READY) break; @@ -283,14 +272,21 @@ static int pulse_open (int fIn, struct pulse_params_req *req, } } - pBufAttr = pa_stream_get_buffer_attr(pStream); - obt->buffer_size = pBufAttr->maxlength; + pBufAttrObtained = pa_stream_get_buffer_attr(pStream); + memcpy(pBufAttr, pBufAttrObtained, sizeof(pa_buffer_attr)); - pa_threaded_mainloop_unlock(g_pMainLoop); - - LogRel(("Pulse: buffer settings: max=%d tlength=%d prebuf=%d minreq=%d\n", + if (fIn) + { + LogRel(("Pulse: Obtained record buffer attributes: maxlength=%d fragsize=%d\n", + pBufAttr->maxlength, pBufAttr->fragsize)); + } + else + { + LogRel(("Pulse: Obtained playback buffer attributes: maxlength=%d tlength=%d prebuf=%d minreq=%d\n", pBufAttr->maxlength, pBufAttr->tlength, pBufAttr->prebuf, pBufAttr->minreq)); + } + pa_threaded_mainloop_unlock(g_pMainLoop); *ppStream = pStream; return 0; @@ -310,117 +306,132 @@ fail: static int pulse_init_out (HWVoiceOut *hw, audsettings_t *as) { - PulseVoice *pulse = (PulseVoice *) hw; - struct pulse_params_req req; - struct pulse_params_obt obt; - audfmt_e effective_fmt; - int endianness; + PulseVoice *pPulse = (PulseVoice *) hw; audsettings_t obt_as; - - req.pa_format = aud_to_pulsefmt (as->fmt); - req.freq = as->freq; - req.nchannels = as->nchannels; - - if (pulse_open (/*fIn=*/0, &req, &obt, &pulse->pStream)) + int cbBuf; + + pPulse->SampleSpec.format = aud_to_pulsefmt (as->fmt); + pPulse->SampleSpec.rate = as->freq; + pPulse->SampleSpec.channels = as->nchannels; + + /* Note that setting maxlength to -1 does not work on PulseAudio servers + * older than 0.9.10. So use the suggested value of 3/2 of tlength */ + pPulse->BufAttr.tlength = (pa_bytes_per_second(&pPulse->SampleSpec) + * conf.buffer_msecs_out) / 1000; + pPulse->BufAttr.maxlength = (pPulse->BufAttr.tlength * 3) / 2; + pPulse->BufAttr.prebuf = -1; /* Same as tlength */ + pPulse->BufAttr.minreq = -1; /* Pulse should set something sensible for minreq on it's own */ + + /* Notice that the struct BufAttr is updated to the obtained values after this call */ + if (pulse_open (0, &pPulse->pStream, &pPulse->SampleSpec, &pPulse->BufAttr)) return -1; - if (pulse_to_audfmt (obt.pa_format, &effective_fmt, &endianness)) + if (pulse_to_audfmt (pPulse->SampleSpec.format, &obt_as.fmt, &obt_as.endianness)) { - LogRel(("Pulse: Cannot find audio format %d\n", obt.pa_format)); + LogRel(("Pulse: Cannot find audio format %d\n", pPulse->SampleSpec.format)); return -1; } - obt_as.freq = obt.freq; - obt_as.nchannels = obt.nchannels; - obt_as.fmt = effective_fmt; - obt_as.endianness = endianness; + obt_as.freq = pPulse->SampleSpec.rate; + obt_as.nchannels = pPulse->SampleSpec.channels; audio_pcm_init_info (&hw->info, &obt_as); - hw->samples = obt.buffer_size >> hw->info.shift; + cbBuf = audio_MIN(pPulse->BufAttr.tlength * 2, pPulse->BufAttr.maxlength); - pulse->pPCMBuf = RTMemAllocZ(obt.buffer_size); - if (!pulse->pPCMBuf) + pPulse->pPCMBuf = RTMemAllocZ(cbBuf); + if (!pPulse->pPCMBuf) { - LogRel(("Pulse: Could not allocate DAC buffer of %d bytes\n", obt.buffer_size)); + LogRel(("Pulse: Could not allocate DAC buffer of %d bytes\n", cbBuf)); return -1; } + /* Convert from bytes to frames (aka samples) */ + hw->samples = cbBuf >> hw->info.shift; + return 0; } static void pulse_fini_out (HWVoiceOut *hw) { - PulseVoice *pulse = (PulseVoice *)hw; - if (pulse->pStream) + PulseVoice *pPulse = (PulseVoice *)hw; + + if (pPulse->pStream) { - pa_stream_disconnect(pulse->pStream); - pa_stream_unref(pulse->pStream); - pulse->pStream = NULL; + pa_threaded_mainloop_lock(g_pMainLoop); + pa_stream_disconnect(pPulse->pStream); + pa_stream_unref(pPulse->pStream); + pa_threaded_mainloop_unlock(g_pMainLoop); + pPulse->pStream = NULL; } - if (pulse->pPCMBuf) + + if (pPulse->pPCMBuf) { - RTMemFree (pulse->pPCMBuf); - pulse->pPCMBuf = NULL; + RTMemFree (pPulse->pPCMBuf); + pPulse->pPCMBuf = NULL; } } static int pulse_run_out (HWVoiceOut *hw) { - PulseVoice *pulse = (PulseVoice *) hw; - int csLive, csDecr = 0, csSamples, csToWrite, csAvail; - size_t cbAvail, cbToWrite; + PulseVoice *pPulse = (PulseVoice *) hw; + int cFramesLive; + int cFramesWritten = 0; + int csSamples; + int cFramesToWrite; + int cFramesAvail; + size_t cbAvail; + size_t cbToWrite; uint8_t *pu8Dst; st_sample_t *psSrc; - csLive = audio_pcm_hw_get_live_out (hw); - if (!csLive) + cFramesLive = audio_pcm_hw_get_live_out (hw); + if (!cFramesLive) return 0; pa_threaded_mainloop_lock(g_pMainLoop); - cbAvail = pa_stream_writable_size (pulse->pStream); + cbAvail = pa_stream_writable_size (pPulse->pStream); if (cbAvail == (size_t)-1) { - if (pulse->cErrors < MAX_LOG_REL_ERRORS) + if (pPulse->cErrors < MAX_LOG_REL_ERRORS) { int rc = pa_context_errno(g_pContext); - pulse->cErrors++; + pPulse->cErrors++; LogRel(("Pulse: Failed to determine the writable size: %s\n", pa_strerror(rc))); - pulse_check_fatal(pulse, rc); } goto unlock_and_exit; } - csAvail = cbAvail >> hw->info.shift; /* bytes => samples */ - csDecr = audio_MIN (csLive, csAvail); - csSamples = csDecr; + cFramesAvail = cbAvail >> hw->info.shift; /* bytes => samples */ + cFramesWritten = audio_MIN (cFramesLive, cFramesAvail); + csSamples = cFramesWritten; while (csSamples) { /* split request at the end of our samples buffer */ - csToWrite = audio_MIN (csSamples, hw->samples - hw->rpos); - cbToWrite = csToWrite << hw->info.shift; - psSrc = hw->mix_buf + hw->rpos; - pu8Dst = advance (pulse->pPCMBuf, hw->rpos << hw->info.shift); + cFramesToWrite = audio_MIN (csSamples, hw->samples - hw->rpos); + cbToWrite = cFramesToWrite << hw->info.shift; + psSrc = hw->mix_buf + hw->rpos; + pu8Dst = advance (pPulse->pPCMBuf, hw->rpos << hw->info.shift); - hw->clip (pu8Dst, psSrc, csToWrite); + hw->clip (pu8Dst, psSrc, cFramesToWrite); - if (pa_stream_write (pulse->pStream, pu8Dst, cbToWrite, + if (pa_stream_write (pPulse->pStream, pu8Dst, cbToWrite, /*cleanup_callback=*/NULL, 0, PA_SEEK_RELATIVE) < 0) { LogRel(("Pulse: Failed to write %d samples: %s\n", - csToWrite, pa_strerror(pa_context_errno(g_pContext)))); + cFramesToWrite, pa_strerror(pa_context_errno(g_pContext)))); break; } - hw->rpos = (hw->rpos + csToWrite) % hw->samples; - csSamples -= csToWrite; + hw->rpos = (hw->rpos + cFramesToWrite) % hw->samples; + csSamples -= cFramesToWrite; } unlock_and_exit: pa_threaded_mainloop_unlock(g_pMainLoop); - return csDecr; + return cFramesWritten; } static int pulse_write (SWVoiceOut *sw, void *buf, int len) @@ -430,75 +441,52 @@ static int pulse_write (SWVoiceOut *sw, void *buf, int len) static void stream_success_callback(pa_stream *pStream, int success, void *userdata) { - PulseVoice *pulse = (PulseVoice *) userdata; - pulse->fOpSuccess = success; - pa_threaded_mainloop_signal(g_pMainLoop, 0); -} - -typedef enum -{ - Unpause = 0, - Pause = 1, - Flush = 2, - Trigger = 3 -} pulse_cmd_t; - -static int pulse_ctrl (HWVoiceOut *hw, pulse_cmd_t cmd) -{ - PulseVoice *pulse = (PulseVoice *) hw; - pa_operation *op = NULL; - - if (!pulse->pStream) - return 0; - - pa_threaded_mainloop_lock(g_pMainLoop); - switch (cmd) + PulseVoice *pPulse = (PulseVoice *) userdata; + pPulse->fOpSuccess = success; + if (!success) { - case Pause: - op = pa_stream_cork(pulse->pStream, 1, stream_success_callback, pulse); - break; - case Unpause: - op = pa_stream_cork(pulse->pStream, 0, stream_success_callback, pulse); - break; - case Flush: - op = pa_stream_flush(pulse->pStream, stream_success_callback, pulse); - break; - case Trigger: - op = pa_stream_trigger(pulse->pStream, stream_success_callback, pulse); - break; - default: - goto unlock_and_exit; - } - if (!op) - { - if (pulse->cErrors < MAX_LOG_REL_ERRORS) + if (pPulse->cErrors < MAX_LOG_REL_ERRORS) { int rc = pa_context_errno(g_pContext); - pulse->cErrors++; - LogRel(("Pulse: Failed ctrl cmd=%d to stream: %s\n", - cmd, pa_strerror(pa_context_errno(g_pContext)))); - pulse_check_fatal(pulse, rc); + pPulse->cErrors++; + LogRel(("Pulse: Failed stream operation: %s\n", pa_strerror(rc))); } } - else + pa_threaded_mainloop_signal(g_pMainLoop, 0); +} + +static int pulse_wait_for_operation (pa_operation *op) +{ + if (op) + { + while (pa_operation_get_state(op) == PA_OPERATION_RUNNING) + pa_threaded_mainloop_wait(g_pMainLoop); pa_operation_unref(op); + } -unlock_and_exit: - pa_threaded_mainloop_unlock(g_pMainLoop); - return 0; + return 1; } static int pulse_ctl_out (HWVoiceOut *hw, int cmd, ...) { + PulseVoice *pPulse = (PulseVoice *) hw; + switch (cmd) { case VOICE_ENABLE: - pulse_ctrl(hw, Unpause); - pulse_ctrl(hw, Trigger); + pa_threaded_mainloop_lock(g_pMainLoop); + pulse_wait_for_operation(pa_stream_cork(pPulse->pStream, 0, stream_success_callback, pPulse)); + pa_threaded_mainloop_unlock(g_pMainLoop); break; + case VOICE_DISABLE: - pulse_ctrl(hw, Flush); + pa_threaded_mainloop_lock(g_pMainLoop); + pulse_wait_for_operation(pa_stream_trigger(pPulse->pStream, stream_success_callback, pPulse)); + pulse_wait_for_operation(pa_stream_drain(pPulse->pStream, stream_success_callback, pPulse)); + pulse_wait_for_operation(pa_stream_cork(pPulse->pStream, 1, stream_success_callback, pPulse)); + pa_threaded_mainloop_unlock(g_pMainLoop); break; + default: return -1; } @@ -507,104 +495,139 @@ static int pulse_ctl_out (HWVoiceOut *hw, int cmd, ...) static int pulse_init_in (HWVoiceIn *hw, audsettings_t *as) { - PulseVoice *pulse = (PulseVoice *) hw; - struct pulse_params_req req; - struct pulse_params_obt obt; - audfmt_e effective_fmt; - int endianness; + PulseVoice *pPulse = (PulseVoice *) hw; audsettings_t obt_as; - req.pa_format = aud_to_pulsefmt (as->fmt); - req.freq = as->freq; - req.nchannels = as->nchannels; + pPulse->SampleSpec.format = aud_to_pulsefmt (as->fmt); + pPulse->SampleSpec.rate = as->freq; + pPulse->SampleSpec.channels = as->nchannels; + + /* XXX check these values */ + pPulse->BufAttr.fragsize = (pa_bytes_per_second(&pPulse->SampleSpec) + * conf.buffer_msecs_in) / 1000; + pPulse->BufAttr.maxlength = (pPulse->BufAttr.fragsize * 3) / 2; + /* Other memebers of pa_buffer_attr are ignored for record streams */ - if (pulse_open (/*fIn=*/1, &req, &obt, &pulse->pStream)) + if (pulse_open (1, &pPulse->pStream, &pPulse->SampleSpec, &pPulse->BufAttr)) return -1; - if (pulse_to_audfmt (obt.pa_format, &effective_fmt, &endianness)) + if (pulse_to_audfmt (pPulse->SampleSpec.format, &obt_as.fmt, &obt_as.endianness)) { - LogRel(("Pulse: Cannot find audio format %d\n", obt.pa_format)); + LogRel(("Pulse: Cannot find audio format %d\n", pPulse->SampleSpec.format)); return -1; } - obt_as.freq = obt.freq; - obt_as.nchannels = obt.nchannels; - obt_as.fmt = effective_fmt; - obt_as.endianness = endianness; - + obt_as.freq = pPulse->SampleSpec.rate; + obt_as.nchannels = pPulse->SampleSpec.channels; audio_pcm_init_info (&hw->info, &obt_as); - - /* pcm_in: reserve twice as the maximum buffer length because of peek()/drop(). */ - hw->samples = 2 * (obt.buffer_size >> hw->info.shift); - - /* no buffer for input */ - pulse->pPCMBuf = NULL; + hw->samples = audio_MIN(pPulse->BufAttr.fragsize * 10, pPulse->BufAttr.maxlength) + >> hw->info.shift; + pPulse->pu8PeekBuf = NULL; return 0; } static void pulse_fini_in (HWVoiceIn *hw) { - PulseVoice *pulse = (PulseVoice *)hw; - if (pulse->pStream) - { - pa_stream_disconnect(pulse->pStream); - pa_stream_unref(pulse->pStream); - pulse->pStream = NULL; - } - if (pulse->pPCMBuf) + PulseVoice *pPulse = (PulseVoice *)hw; + + if (pPulse->pStream) { - RTMemFree (pulse->pPCMBuf); - pulse->pPCMBuf = NULL; + pa_threaded_mainloop_lock(g_pMainLoop); + pa_stream_disconnect(pPulse->pStream); + pa_stream_unref(pPulse->pStream); + pa_threaded_mainloop_unlock(g_pMainLoop); + pPulse->pStream = NULL; } } static int pulse_run_in (HWVoiceIn *hw) { - PulseVoice *pulse = (PulseVoice *) hw; - int csDead, csDecr = 0, csSamples, csRead, csAvail; - size_t cbAvail; - const void *pu8Src; - st_sample_t *psDst; - - csDead = hw->samples - audio_pcm_hw_get_live_in (hw); - - if (!csDead) - return 0; /* no buffer available */ - + PulseVoice *pPulse = (PulseVoice *) hw; + const int hwshift = hw->info.shift; + int cFramesRead = 0; /* total frames which have been read this call */ + int cFramesAvail; /* total frames available from pulse at start of call */ + int cFramesToRead; /* the largest amount we want/can get this call */ + int cFramesToPeek; /* the largest amount we want/can get this peek */ + + /* We should only call pa_stream_readable_size() once and trust the first value */ pa_threaded_mainloop_lock(g_pMainLoop); + cFramesAvail = pa_stream_readable_size(pPulse->pStream) >> hwshift; + pa_threaded_mainloop_unlock(g_pMainLoop); - if (pa_stream_peek(pulse->pStream, &pu8Src, &cbAvail) < 0) + if (cFramesAvail == -1) { - LogRel(("Pulse: Peek failed: %s\n", - pa_strerror(pa_context_errno(g_pContext)))); - goto unlock_and_exit; + if (pPulse->cErrors < MAX_LOG_REL_ERRORS) + { + int rc = pa_context_errno(g_pContext); + pPulse->cErrors++; + LogRel(("Pulse: Failed to determine the readable size: %s\n", + pa_strerror(rc))); + } + return 0; } - if (!pu8Src) - goto unlock_and_exit; - - csAvail = cbAvail >> hw->info.shift; - csDecr = audio_MIN (csDead, csAvail); - csSamples = csDecr; + /* If the buffer was not dropped last call, add what remains */ + if (pPulse->pu8PeekBuf) + cFramesAvail += (pPulse->cbPeekBuf - pPulse->offPeekBuf) >> hwshift; - while (csSamples) + cFramesToRead = audio_MIN(cFramesAvail, hw->samples - audio_pcm_hw_get_live_in(hw)); + for (; cFramesToRead; cFramesToRead -= cFramesToPeek) { - /* split request at the end of our samples buffer */ - psDst = hw->conv_buf + hw->wpos; - csRead = audio_MIN (csSamples, hw->samples - hw->wpos); - hw->conv (psDst, pu8Src, csRead, &nominal_volume); - hw->wpos = (hw->wpos + csRead) % hw->samples; - csSamples -= csRead; - pu8Src = (const void*)((uint8_t*)pu8Src + (csRead << hw->info.shift)); - } + /* If there is no data, do another peek */ + if (!pPulse->pu8PeekBuf) + { + pa_threaded_mainloop_lock(g_pMainLoop); + pa_stream_peek(pPulse->pStream, (const void**)&pPulse->pu8PeekBuf, &pPulse->cbPeekBuf); + pa_threaded_mainloop_unlock(g_pMainLoop); + pPulse->offPeekBuf = 0; + if ( !pPulse->pu8PeekBuf + || !pPulse->cbPeekBuf) + break; + } - pa_stream_drop(pulse->pStream); + cFramesToPeek = audio_MIN((signed)( pPulse->cbPeekBuf + - pPulse->offPeekBuf) >> hwshift, + cFramesToRead); -unlock_and_exit: - pa_threaded_mainloop_unlock(g_pMainLoop); + /* Check for wrapping around the buffer end */ + if (hw->wpos + cFramesToPeek > hw->samples) + { + int cFramesDelta = hw->samples - hw->wpos; + + hw->conv(hw->conv_buf + hw->wpos, + pPulse->pu8PeekBuf + pPulse->offPeekBuf, + cFramesDelta, + &nominal_volume); + + hw->conv(hw->conv_buf, + pPulse->pu8PeekBuf + pPulse->offPeekBuf + (cFramesDelta << hwshift), + cFramesToPeek - cFramesDelta, + &nominal_volume); + } + else + { + hw->conv(hw->conv_buf + hw->wpos, + pPulse->pu8PeekBuf + pPulse->offPeekBuf, + cFramesToPeek, + &nominal_volume); + } - return csDecr; + cFramesRead += cFramesToPeek; + hw->wpos = (hw->wpos + cFramesToPeek) % hw->samples; + pPulse->offPeekBuf += cFramesToPeek << hwshift; + + /* If the buffer is done, drop it */ + if (pPulse->offPeekBuf == pPulse->cbPeekBuf) + { + pa_threaded_mainloop_lock(g_pMainLoop); + pa_stream_drop(pPulse->pStream); + pa_threaded_mainloop_unlock(g_pMainLoop); + pPulse->pu8PeekBuf = NULL; + } + } + + return cFramesRead; } static int pulse_read (SWVoiceIn *sw, void *buf, int size) @@ -614,6 +637,30 @@ static int pulse_read (SWVoiceIn *sw, void *buf, int size) static int pulse_ctl_in (HWVoiceIn *hw, int cmd, ...) { + PulseVoice *pPulse = (PulseVoice *)hw; + + switch (cmd) + { + case VOICE_ENABLE: + pa_threaded_mainloop_lock(g_pMainLoop); + pulse_wait_for_operation(pa_stream_cork(pPulse->pStream, 0, stream_success_callback, pPulse)); + pa_threaded_mainloop_unlock(g_pMainLoop); + break; + + case VOICE_DISABLE: + pa_threaded_mainloop_lock(g_pMainLoop); + if (pPulse->pu8PeekBuf) + { + pa_stream_drop(pPulse->pStream); + pPulse->pu8PeekBuf = NULL; + } + pulse_wait_for_operation(pa_stream_cork(pPulse->pStream, 1, stream_success_callback, pPulse)); + pa_threaded_mainloop_unlock(g_pMainLoop); + break; + + default: + return -1; + } return 0; } @@ -627,18 +674,21 @@ static void *pulse_audio_init (void) LogRel(("Pulse: Failed to load the PulseAudio shared library! Error %Rrc\n", rc)); return NULL; } + if (!(g_pMainLoop = pa_threaded_mainloop_new())) { LogRel(("Pulse: Failed to allocate main loop: %s\n", pa_strerror(pa_context_errno(g_pContext)))); goto fail; } + if (!(g_pContext = pa_context_new(pa_threaded_mainloop_get_api(g_pMainLoop), "VBox"))) { LogRel(("Pulse: Failed to allocate context: %s\n", pa_strerror(pa_context_errno(g_pContext)))); goto fail; } + if (pa_threaded_mainloop_start(g_pMainLoop) < 0) { LogRel(("Pulse: Failed to start threaded mainloop: %s\n", @@ -688,11 +738,13 @@ fail: pa_context_unref(g_pContext); g_pContext = NULL; } + if (g_pMainLoop) { pa_threaded_mainloop_free(g_pMainLoop); g_pMainLoop = NULL; } + return NULL; } @@ -700,17 +752,20 @@ static void pulse_audio_fini (void *opaque) { if (g_pMainLoop) pa_threaded_mainloop_stop(g_pMainLoop); + if (g_pContext) { pa_context_disconnect(g_pContext); pa_context_unref(g_pContext); g_pContext = NULL; } + if (g_pMainLoop) { pa_threaded_mainloop_free(g_pMainLoop); g_pMainLoop = NULL; } + (void) opaque; } diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/IndustryStandard/PeImage.h b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/IndustryStandard/PeImage.h new file mode 100644 index 000000000..2539a007b --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/IndustryStandard/PeImage.h @@ -0,0 +1,773 @@ +/** @file + EFI image format for PE32, PE32+ and TE. Please note some data structures are + different for PE32 and PE32+. EFI_IMAGE_NT_HEADERS32 is for PE32 and + EFI_IMAGE_NT_HEADERS64 is for PE32+. + + This file is coded to the Visual Studio, Microsoft Portable Executable and + Common Object File Format Specification, Revision 8.0 - May 16, 2006. + This file also includes some definitions in PI Specification, Revision 1.0. + + Copyright (c) 2006 - 2009, Intel Corporation
+ Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __PE_IMAGE_H__ +#define __PE_IMAGE_H__ + +// +// PE32+ Subsystem type for EFI images +// +#define EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION 10 +#define EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 +#define EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 +#define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER 13 ///< defined PI Specification, 1.0 + + +// +// PE32+ Machine type for EFI images +// +#define IMAGE_FILE_MACHINE_I386 0x014c +#define IMAGE_FILE_MACHINE_IA64 0x0200 +#define IMAGE_FILE_MACHINE_EBC 0x0EBC +#define IMAGE_FILE_MACHINE_X64 0x8664 +#define IMAGE_FILE_MACHINE_ARMTHUMB_MIXED 0x01c2 + +// +// EXE file formats +// +#define EFI_IMAGE_DOS_SIGNATURE SIGNATURE_16('M', 'Z') +#define EFI_IMAGE_OS2_SIGNATURE SIGNATURE_16('N', 'E') +#define EFI_IMAGE_OS2_SIGNATURE_LE SIGNATURE_16('L', 'E') +#define EFI_IMAGE_NT_SIGNATURE SIGNATURE_32('P', 'E', '\0', '\0') + +/// +/// PE images can start with an optional DOS header, so if an image is run +/// under DOS it can print an error message. +/// +typedef struct { + UINT16 e_magic; ///< Magic number + UINT16 e_cblp; ///< Bytes on last page of file + UINT16 e_cp; ///< Pages in file + UINT16 e_crlc; ///< Relocations + UINT16 e_cparhdr; ///< Size of header in paragraphs + UINT16 e_minalloc; ///< Minimum extra paragraphs needed + UINT16 e_maxalloc; ///< Maximum extra paragraphs needed + UINT16 e_ss; ///< Initial (relative) SS value + UINT16 e_sp; ///< Initial SP value + UINT16 e_csum; ///< Checksum + UINT16 e_ip; ///< Initial IP value + UINT16 e_cs; ///< Initial (relative) CS value + UINT16 e_lfarlc; ///< File address of relocation table + UINT16 e_ovno; ///< Overlay number + UINT16 e_res[4]; ///< Reserved words + UINT16 e_oemid; ///< OEM identifier (for e_oeminfo) + UINT16 e_oeminfo; ///< OEM information; e_oemid specific + UINT16 e_res2[10]; ///< Reserved words + UINT32 e_lfanew; ///< File address of new exe header +} EFI_IMAGE_DOS_HEADER; + +/// +/// COFF File Header (Object and Image) +/// +typedef struct { + UINT16 Machine; + UINT16 NumberOfSections; + UINT32 TimeDateStamp; + UINT32 PointerToSymbolTable; + UINT32 NumberOfSymbols; + UINT16 SizeOfOptionalHeader; + UINT16 Characteristics; +} EFI_IMAGE_FILE_HEADER; + +/// +/// Size of EFI_IMAGE_FILE_HEADER +/// +#define EFI_IMAGE_SIZEOF_FILE_HEADER 20 + +// +// Characteristics +// +#define EFI_IMAGE_FILE_RELOCS_STRIPPED BIT0 ///< 0x0001 Relocation info stripped from file. +#define EFI_IMAGE_FILE_EXECUTABLE_IMAGE BIT1 ///< 0x0002 File is executable (i.e. no unresolved externel references). +#define EFI_IMAGE_FILE_LINE_NUMS_STRIPPED BIT2 ///< 0x0004 Line nunbers stripped from file. +#define EFI_IMAGE_FILE_LOCAL_SYMS_STRIPPED BIT3 ///< 0x0008 Local symbols stripped from file. +#define EFI_IMAGE_FILE_BYTES_REVERSED_LO BIT7 ///< 0x0080 Bytes of machine word are reversed. +#define EFI_IMAGE_FILE_32BIT_MACHINE BIT8 ///< 0x0100 32 bit word machine. +#define EFI_IMAGE_FILE_DEBUG_STRIPPED BIT9 ///< 0x0200 Debugging info stripped from file in .DBG file +#define EFI_IMAGE_FILE_SYSTEM BIT12 ///< 0x1000 System File. +#define EFI_IMAGE_FILE_DLL BIT13 ///< 0x2000 File is a DLL. +#define EFI_IMAGE_FILE_BYTES_REVERSED_HI BIT15 ///< 0x8000 Bytes of machine word are reversed. + +/// +/// Header Data Directories +/// +typedef struct { + UINT32 VirtualAddress; + UINT32 Size; +} EFI_IMAGE_DATA_DIRECTORY; + +// +// Directory Entries +// +#define EFI_IMAGE_DIRECTORY_ENTRY_EXPORT 0 +#define EFI_IMAGE_DIRECTORY_ENTRY_IMPORT 1 +#define EFI_IMAGE_DIRECTORY_ENTRY_RESOURCE 2 +#define EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 +#define EFI_IMAGE_DIRECTORY_ENTRY_SECURITY 4 +#define EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC 5 +#define EFI_IMAGE_DIRECTORY_ENTRY_DEBUG 6 +#define EFI_IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 +#define EFI_IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 +#define EFI_IMAGE_DIRECTORY_ENTRY_TLS 9 +#define EFI_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 + +#define EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES 16 + +/// +/// @attention +/// EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC means PE32 and +/// EFI_IMAGE_OPTIONAL_HEADER32 must be used. The data structures only vary +/// after NT additional fields. +/// +#define EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b + +/// +/// Optional Header Standard Fields for PE32 +/// +typedef struct { + /// + /// Standard fields. + /// + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + UINT32 BaseOfData; ///< PE32 contains this additional field, which is absent in PE32+ + /// + /// Optional Header Windows-Specific Fields. + /// + UINT32 ImageBase; + UINT32 SectionAlignment; + UINT32 FileAlignment; + UINT16 MajorOperatingSystemVersion; + UINT16 MinorOperatingSystemVersion; + UINT16 MajorImageVersion; + UINT16 MinorImageVersion; + UINT16 MajorSubsystemVersion; + UINT16 MinorSubsystemVersion; + UINT32 Win32VersionValue; + UINT32 SizeOfImage; + UINT32 SizeOfHeaders; + UINT32 CheckSum; + UINT16 Subsystem; + UINT16 DllCharacteristics; + UINT32 SizeOfStackReserve; + UINT32 SizeOfStackCommit; + UINT32 SizeOfHeapReserve; + UINT32 SizeOfHeapCommit; + UINT32 LoaderFlags; + UINT32 NumberOfRvaAndSizes; + EFI_IMAGE_DATA_DIRECTORY DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES]; +} EFI_IMAGE_OPTIONAL_HEADER32; + +/// +/// @attention +/// EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC means PE32+ and +/// EFI_IMAGE_OPTIONAL_HEADER64 must be used. The data structures only vary +/// after NT additional fields. +/// +#define EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b + +/// +/// Optional Header Standard Fields for PE32+ +/// +typedef struct { + /// + /// Standard fields. + /// + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + /// + /// Optional Header Windows-Specific Fields. + /// + UINT64 ImageBase; + UINT32 SectionAlignment; + UINT32 FileAlignment; + UINT16 MajorOperatingSystemVersion; + UINT16 MinorOperatingSystemVersion; + UINT16 MajorImageVersion; + UINT16 MinorImageVersion; + UINT16 MajorSubsystemVersion; + UINT16 MinorSubsystemVersion; + UINT32 Win32VersionValue; + UINT32 SizeOfImage; + UINT32 SizeOfHeaders; + UINT32 CheckSum; + UINT16 Subsystem; + UINT16 DllCharacteristics; + UINT64 SizeOfStackReserve; + UINT64 SizeOfStackCommit; + UINT64 SizeOfHeapReserve; + UINT64 SizeOfHeapCommit; + UINT32 LoaderFlags; + UINT32 NumberOfRvaAndSizes; + EFI_IMAGE_DATA_DIRECTORY DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES]; +} EFI_IMAGE_OPTIONAL_HEADER64; + + +/// +/// @attention +/// EFI_IMAGE_NT_HEADERS32 is for use ONLY by tools. +/// +typedef struct { + UINT32 Signature; + EFI_IMAGE_FILE_HEADER FileHeader; + EFI_IMAGE_OPTIONAL_HEADER32 OptionalHeader; +} EFI_IMAGE_NT_HEADERS32; + +#define EFI_IMAGE_SIZEOF_NT_OPTIONAL32_HEADER sizeof (EFI_IMAGE_NT_HEADERS32) + +/// +/// @attention +/// EFI_IMAGE_HEADERS64 is for use ONLY by tools. +/// +typedef struct { + UINT32 Signature; + EFI_IMAGE_FILE_HEADER FileHeader; + EFI_IMAGE_OPTIONAL_HEADER64 OptionalHeader; +} EFI_IMAGE_NT_HEADERS64; + +#define EFI_IMAGE_SIZEOF_NT_OPTIONAL64_HEADER sizeof (EFI_IMAGE_NT_HEADERS64) + +// +// Other Windows Subsystem Values +// +#define EFI_IMAGE_SUBSYSTEM_UNKNOWN 0 +#define EFI_IMAGE_SUBSYSTEM_NATIVE 1 +#define EFI_IMAGE_SUBSYSTEM_WINDOWS_GUI 2 +#define EFI_IMAGE_SUBSYSTEM_WINDOWS_CUI 3 +#define EFI_IMAGE_SUBSYSTEM_OS2_CUI 5 +#define EFI_IMAGE_SUBSYSTEM_POSIX_CUI 7 + +/// +/// Length of ShortName. +/// +#define EFI_IMAGE_SIZEOF_SHORT_NAME 8 + +/// +/// Section Table, this table immediately follows the optional header +/// +typedef struct { + UINT8 Name[EFI_IMAGE_SIZEOF_SHORT_NAME]; + union { + UINT32 PhysicalAddress; + UINT32 VirtualSize; + } Misc; + UINT32 VirtualAddress; + UINT32 SizeOfRawData; + UINT32 PointerToRawData; + UINT32 PointerToRelocations; + UINT32 PointerToLinenumbers; + UINT16 NumberOfRelocations; + UINT16 NumberOfLinenumbers; + UINT32 Characteristics; +} EFI_IMAGE_SECTION_HEADER; + +/// +/// Size of EFI_IMAGE_SECTION_HEADER +/// +#define EFI_IMAGE_SIZEOF_SECTION_HEADER 40 + +// +// Section Flags Values +// +#define EFI_IMAGE_SCN_TYPE_NO_PAD BIT3 ///< 0x00000008 ///< Reserved. +#define EFI_IMAGE_SCN_CNT_CODE BIT5 ///< 0x00000020 +#define EFI_IMAGE_SCN_CNT_INITIALIZED_DATA BIT6 ///< 0x00000040 +#define EFI_IMAGE_SCN_CNT_UNINITIALIZED_DATA BIT7 ///< 0x00000080 + +#define EFI_IMAGE_SCN_LNK_OTHER BIT8 ///< 0x00000100 ///< Reserved. +#define EFI_IMAGE_SCN_LNK_INFO BIT9 ///< 0x00000200 ///< Section contains comments or some other type of information. +#define EFI_IMAGE_SCN_LNK_REMOVE BIT11 ///< 0x00000800 ///< Section contents will not become part of image. +#define EFI_IMAGE_SCN_LNK_COMDAT BIT12 ///< 0x00001000 + +#define EFI_IMAGE_SCN_ALIGN_1BYTES BIT20 ///< 0x00100000 +#define EFI_IMAGE_SCN_ALIGN_2BYTES BIT21 ///< 0x00200000 +#define EFI_IMAGE_SCN_ALIGN_4BYTES (BIT20|BIT21) ///< 0x00300000 +#define EFI_IMAGE_SCN_ALIGN_8BYTES BIT22 ///< 0x00400000 +#define EFI_IMAGE_SCN_ALIGN_16BYTES (BIT20|BIT22) ///< 0x00500000 +#define EFI_IMAGE_SCN_ALIGN_32BYTES (BIT21|BIT22) ///< 0x00600000 +#define EFI_IMAGE_SCN_ALIGN_64BYTES (BIT20|BIT21|BIT22) ///< 0x00700000 + +#define EFI_IMAGE_SCN_MEM_DISCARDABLE BIT25 ///< 0x02000000 +#define EFI_IMAGE_SCN_MEM_NOT_CACHED BIT26 ///< 0x04000000 +#define EFI_IMAGE_SCN_MEM_NOT_PAGED BIT27 ///< 0x08000000 +#define EFI_IMAGE_SCN_MEM_SHARED BIT28 ///< 0x10000000 +#define EFI_IMAGE_SCN_MEM_EXECUTE BIT29 ///< 0x20000000 +#define EFI_IMAGE_SCN_MEM_READ BIT30 ///< 0x40000000 +#define EFI_IMAGE_SCN_MEM_WRITE BIT31 ///< 0x80000000 + +/// +/// Size of a Symbol Table Record +/// +#define EFI_IMAGE_SIZEOF_SYMBOL 18 + +// +// Symbols have a section number of the section in which they are +// defined. Otherwise, section numbers have the following meanings: +// +#define EFI_IMAGE_SYM_UNDEFINED (UINT16) 0 ///< Symbol is undefined or is common. +#define EFI_IMAGE_SYM_ABSOLUTE (UINT16) -1 ///< Symbol is an absolute value. +#define EFI_IMAGE_SYM_DEBUG (UINT16) -2 ///< Symbol is a special debug item. + +// +// Symbol Type (fundamental) values. +// +#define EFI_IMAGE_SYM_TYPE_NULL 0 ///< no type. +#define EFI_IMAGE_SYM_TYPE_VOID 1 ///< no valid type. +#define EFI_IMAGE_SYM_TYPE_CHAR 2 ///< type character. +#define EFI_IMAGE_SYM_TYPE_SHORT 3 ///< type short integer. +#define EFI_IMAGE_SYM_TYPE_INT 4 +#define EFI_IMAGE_SYM_TYPE_LONG 5 +#define EFI_IMAGE_SYM_TYPE_FLOAT 6 +#define EFI_IMAGE_SYM_TYPE_DOUBLE 7 +#define EFI_IMAGE_SYM_TYPE_STRUCT 8 +#define EFI_IMAGE_SYM_TYPE_UNION 9 +#define EFI_IMAGE_SYM_TYPE_ENUM 10 ///< enumeration. +#define EFI_IMAGE_SYM_TYPE_MOE 11 ///< member of enumeration. +#define EFI_IMAGE_SYM_TYPE_BYTE 12 +#define EFI_IMAGE_SYM_TYPE_WORD 13 +#define EFI_IMAGE_SYM_TYPE_UINT 14 +#define EFI_IMAGE_SYM_TYPE_DWORD 15 + +// +// Symbol Type (derived) values. +// +#define EFI_IMAGE_SYM_DTYPE_NULL 0 ///< no derived type. +#define EFI_IMAGE_SYM_DTYPE_POINTER 1 +#define EFI_IMAGE_SYM_DTYPE_FUNCTION 2 +#define EFI_IMAGE_SYM_DTYPE_ARRAY 3 + +// +// Storage classes. +// +#define EFI_IMAGE_SYM_CLASS_END_OF_FUNCTION ((UINT8) -1) +#define EFI_IMAGE_SYM_CLASS_NULL 0 +#define EFI_IMAGE_SYM_CLASS_AUTOMATIC 1 +#define EFI_IMAGE_SYM_CLASS_EXTERNAL 2 +#define EFI_IMAGE_SYM_CLASS_STATIC 3 +#define EFI_IMAGE_SYM_CLASS_REGISTER 4 +#define EFI_IMAGE_SYM_CLASS_EXTERNAL_DEF 5 +#define EFI_IMAGE_SYM_CLASS_LABEL 6 +#define EFI_IMAGE_SYM_CLASS_UNDEFINED_LABEL 7 +#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8 +#define EFI_IMAGE_SYM_CLASS_ARGUMENT 9 +#define EFI_IMAGE_SYM_CLASS_STRUCT_TAG 10 +#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_UNION 11 +#define EFI_IMAGE_SYM_CLASS_UNION_TAG 12 +#define EFI_IMAGE_SYM_CLASS_TYPE_DEFINITION 13 +#define EFI_IMAGE_SYM_CLASS_UNDEFINED_STATIC 14 +#define EFI_IMAGE_SYM_CLASS_ENUM_TAG 15 +#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16 +#define EFI_IMAGE_SYM_CLASS_REGISTER_PARAM 17 +#define EFI_IMAGE_SYM_CLASS_BIT_FIELD 18 +#define EFI_IMAGE_SYM_CLASS_BLOCK 100 +#define EFI_IMAGE_SYM_CLASS_FUNCTION 101 +#define EFI_IMAGE_SYM_CLASS_END_OF_STRUCT 102 +#define EFI_IMAGE_SYM_CLASS_FILE 103 +#define EFI_IMAGE_SYM_CLASS_SECTION 104 +#define EFI_IMAGE_SYM_CLASS_WEAK_EXTERNAL 105 + +// +// type packing constants +// +#define EFI_IMAGE_N_BTMASK 017 +#define EFI_IMAGE_N_TMASK 060 +#define EFI_IMAGE_N_TMASK1 0300 +#define EFI_IMAGE_N_TMASK2 0360 +#define EFI_IMAGE_N_BTSHFT 4 +#define EFI_IMAGE_N_TSHIFT 2 + +// +// Communal selection types. +// +#define EFI_IMAGE_COMDAT_SELECT_NODUPLICATES 1 +#define EFI_IMAGE_COMDAT_SELECT_ANY 2 +#define EFI_IMAGE_COMDAT_SELECT_SAME_SIZE 3 +#define EFI_IMAGE_COMDAT_SELECT_EXACT_MATCH 4 +#define EFI_IMAGE_COMDAT_SELECT_ASSOCIATIVE 5 + +// +// the following values only be referred in PeCoff, not defined in PECOFF. +// +#define EFI_IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1 +#define EFI_IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2 +#define EFI_IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3 + +/// +/// Relocation format. +/// +typedef struct { + UINT32 VirtualAddress; + UINT32 SymbolTableIndex; + UINT16 Type; +} EFI_IMAGE_RELOCATION; + +/// +/// Size of EFI_IMAGE_RELOCATION +/// +#define EFI_IMAGE_SIZEOF_RELOCATION 10 + +// +// I386 relocation types. +// +#define EFI_IMAGE_REL_I386_ABSOLUTE 0x0000 ///< Reference is absolute, no relocation is necessary +#define EFI_IMAGE_REL_I386_DIR16 0x0001 ///< Direct 16-bit reference to the symbols virtual address +#define EFI_IMAGE_REL_I386_REL16 0x0002 ///< PC-relative 16-bit reference to the symbols virtual address +#define EFI_IMAGE_REL_I386_DIR32 0x0006 ///< Direct 32-bit reference to the symbols virtual address +#define EFI_IMAGE_REL_I386_DIR32NB 0x0007 ///< Direct 32-bit reference to the symbols virtual address, base not included +#define EFI_IMAGE_REL_I386_SEG12 0x0009 ///< Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address +#define EFI_IMAGE_REL_I386_SECTION 0x000A +#define EFI_IMAGE_REL_I386_SECREL 0x000B +#define EFI_IMAGE_REL_I386_REL32 0x0014 ///< PC-relative 32-bit reference to the symbols virtual address + +// +// x64 processor relocation types. +// +#define IMAGE_REL_AMD64_ABSOLUTE 0x0000 +#define IMAGE_REL_AMD64_ADDR64 0x0001 +#define IMAGE_REL_AMD64_ADDR32 0x0002 +#define IMAGE_REL_AMD64_ADDR32NB 0x0003 +#define IMAGE_REL_AMD64_REL32 0x0004 +#define IMAGE_REL_AMD64_REL32_1 0x0005 +#define IMAGE_REL_AMD64_REL32_2 0x0006 +#define IMAGE_REL_AMD64_REL32_3 0x0007 +#define IMAGE_REL_AMD64_REL32_4 0x0008 +#define IMAGE_REL_AMD64_REL32_5 0x0009 +#define IMAGE_REL_AMD64_SECTION 0x000A +#define IMAGE_REL_AMD64_SECREL 0x000B +#define IMAGE_REL_AMD64_SECREL7 0x000C +#define IMAGE_REL_AMD64_TOKEN 0x000D +#define IMAGE_REL_AMD64_SREL32 0x000E +#define IMAGE_REL_AMD64_PAIR 0x000F +#define IMAGE_REL_AMD64_SSPAN32 0x0010 + +/// +/// Based relocation format. +/// +typedef struct { + UINT32 VirtualAddress; + UINT32 SizeOfBlock; +} EFI_IMAGE_BASE_RELOCATION; + +/// +/// Size of EFI_IMAGE_BASE_RELOCATION +/// +#define EFI_IMAGE_SIZEOF_BASE_RELOCATION 8 + +// +// Based relocation types. +// +#define EFI_IMAGE_REL_BASED_ABSOLUTE 0 +#define EFI_IMAGE_REL_BASED_HIGH 1 +#define EFI_IMAGE_REL_BASED_LOW 2 +#define EFI_IMAGE_REL_BASED_HIGHLOW 3 +#define EFI_IMAGE_REL_BASED_HIGHADJ 4 +#define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5 +#define EFI_IMAGE_REL_BASED_IA64_IMM64 9 +#define EFI_IMAGE_REL_BASED_MIPS_JMPADDR16 9 +#define EFI_IMAGE_REL_BASED_DIR64 10 + +/// +/// Line number format. +/// +typedef struct { + union { + UINT32 SymbolTableIndex; ///< Symbol table index of function name if Linenumber is 0. + UINT32 VirtualAddress; ///< Virtual address of line number. + } Type; + UINT16 Linenumber; ///< Line number. +} EFI_IMAGE_LINENUMBER; + +/// +/// Size of EFI_IMAGE_LINENUMBER +/// +#define EFI_IMAGE_SIZEOF_LINENUMBER 6 + +// +// Archive format. +// +#define EFI_IMAGE_ARCHIVE_START_SIZE 8 +#define EFI_IMAGE_ARCHIVE_START "!\n" +#define EFI_IMAGE_ARCHIVE_END "`\n" +#define EFI_IMAGE_ARCHIVE_PAD "\n" +#define EFI_IMAGE_ARCHIVE_LINKER_MEMBER "/ " +#define EFI_IMAGE_ARCHIVE_LONGNAMES_MEMBER "// " + +/// +/// Archive Member Headers +/// +typedef struct { + UINT8 Name[16]; ///< File member name - `/' terminated. + UINT8 Date[12]; ///< File member date - decimal. + UINT8 UserID[6]; ///< File member user id - decimal. + UINT8 GroupID[6]; ///< File member group id - decimal. + UINT8 Mode[8]; ///< File member mode - octal. + UINT8 Size[10]; ///< File member size - decimal. + UINT8 EndHeader[2]; ///< String to end header. (0x60 0x0A) +} EFI_IMAGE_ARCHIVE_MEMBER_HEADER; + +/// +/// Size of EFI_IMAGE_ARCHIVE_MEMBER_HEADER +/// +#define EFI_IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60 + + +// +// DLL Support +// + +/// +/// Export Directory Table +/// +typedef struct { + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 Name; + UINT32 Base; + UINT32 NumberOfFunctions; + UINT32 NumberOfNames; + UINT32 AddressOfFunctions; + UINT32 AddressOfNames; + UINT32 AddressOfNameOrdinals; +} EFI_IMAGE_EXPORT_DIRECTORY; + +/// +/// Hint/Name Table +/// +typedef struct { + UINT16 Hint; + UINT8 Name[1]; +} EFI_IMAGE_IMPORT_BY_NAME; + +/// +/// Import Address Table RVA (Thunk Table) +/// +typedef struct { + union { + UINT32 Function; + UINT32 Ordinal; + EFI_IMAGE_IMPORT_BY_NAME *AddressOfData; + } u1; +} EFI_IMAGE_THUNK_DATA; + +#define EFI_IMAGE_ORDINAL_FLAG BIT31 ///< Flag for PE32 +#define EFI_IMAGE_SNAP_BY_ORDINAL(Ordinal) ((Ordinal & EFI_IMAGE_ORDINAL_FLAG) != 0) +#define EFI_IMAGE_ORDINAL(Ordinal) (Ordinal & 0xffff) + +/// +/// Import Directory Table +/// +typedef struct { + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT32 ForwarderChain; + UINT32 Name; + EFI_IMAGE_THUNK_DATA *FirstThunk; +} EFI_IMAGE_IMPORT_DESCRIPTOR; + + +/// +/// Debug Directory Format +/// +typedef struct { + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 Type; + UINT32 SizeOfData; + UINT32 RVA; ///< The address of the debug data when loaded, relative to the image base + UINT32 FileOffset; ///< The file pointer to the debug data +} EFI_IMAGE_DEBUG_DIRECTORY_ENTRY; + +#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2 ///< The Visual C++ debug information + +/// +/// Debug Data Structure defined in Microsoft C++ +/// +#define CODEVIEW_SIGNATURE_NB10 SIGNATURE_32('N', 'B', '1', '0') +typedef struct { + UINT32 Signature; ///< "NB10" + UINT32 Unknown; + UINT32 Unknown2; + UINT32 Unknown3; + // + // Filename of .PDB goes here + // +} EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY; + +/// +/// Debug Data Structure defined in Microsoft C++ +/// +#define CODEVIEW_SIGNATURE_RSDS SIGNATURE_32('R', 'S', 'D', 'S') +typedef struct { + UINT32 Signature; ///< "RSDS" + UINT32 Unknown; + UINT32 Unknown2; + UINT32 Unknown3; + UINT32 Unknown4; + UINT32 Unknown5; + // + // Filename of .PDB goes here + // +} EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY; + + +/// +/// Debug Data Structure defined by Apple Mach-O to Coff utility +/// +#define CODEVIEW_SIGNATURE_MTOC SIGNATURE_32('M', 'T', 'O', 'C') +typedef struct { + UINT32 Signature; ///< "MTOC" + GUID MachOUuid; + // + // Filename of .DLL (Mach-O with debug info) goes here + // +} EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY; + +/// +/// Resource format. +/// +typedef struct { + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT16 NumberOfNamedEntries; + UINT16 NumberOfIdEntries; + // + // Array of EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY entries goes here. + // +} EFI_IMAGE_RESOURCE_DIRECTORY; + +/// +/// Resource directory entry format. +/// +typedef struct { + union { + struct { + UINT32 NameOffset:31; + UINT32 NameIsString:1; + } s; + UINT32 Id; + } u1; + union { + UINT32 OffsetToData; + struct { + UINT32 OffsetToDirectory:31; + UINT32 DataIsDirectory:1; + } s; + } u2; +} EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY; + +/// +/// Resource directory entry for string. +/// +typedef struct { + UINT16 Length; + CHAR16 String[1]; +} EFI_IMAGE_RESOURCE_DIRECTORY_STRING; + +/// +/// Resource directory entry for data array. +/// +typedef struct { + UINT32 OffsetToData; + UINT32 Size; + UINT32 CodePage; + UINT32 Reserved; +} EFI_IMAGE_RESOURCE_DATA_ENTRY; + +/// +/// Header format for TE images, defined in PI Specification, 1.0 +/// +typedef struct { + UINT16 Signature; ///< signature for TE format = "VZ" + UINT16 Machine; ///< from the original file header + UINT8 NumberOfSections; ///< from the original file header + UINT8 Subsystem; ///< from original optional header + UINT16 StrippedSize; ///< how many bytes we removed from the header + UINT32 AddressOfEntryPoint; ///< offset to entry point -- from original optional header + UINT32 BaseOfCode; ///< from original image -- required for ITP debug + UINT64 ImageBase; ///< from original file header + EFI_IMAGE_DATA_DIRECTORY DataDirectory[2]; ///< only base relocation and debug directory +} EFI_TE_IMAGE_HEADER; + + +#define EFI_TE_IMAGE_HEADER_SIGNATURE SIGNATURE_16('V', 'Z') +typedef struct _EFI_FAT_IMAGE_HEADER +{ + UINT32 Signature; + UINT32 NFatArch; +} EFI_FAT_IMAGE_HEADER; + +#define EFI_FAT_IMAGE_HEADER_SIGNATURE 0xef1fab9 /* Note: it's deiffer from 0xcafebabe */ +typedef struct _EFI_FAT_IMAGE_HEADER_NLIST +{ + UINT32 CpuType; + UINT32 CpuSubType; + UINT32 Offset; + UINT32 Size; + UINT32 Align; +} EFI_FAT_IMAGE_HEADER_NLIST; + +#define EFI_FAT_CPU_TYPE_I386 0x7 +#define EFI_FAT_CPU_TYPE_X64 0x1000007 + +#define EFI_FAT_CPU_SUB_TYPE_PC 0x3 + +// +// Data directory indexes in our TE image header +// +#define EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC 0 +#define EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG 1 + + +/// +/// Union of PE32, PE32+, and TE headers +/// +typedef union { + EFI_IMAGE_NT_HEADERS32 Pe32; + EFI_IMAGE_NT_HEADERS64 Pe32Plus; + EFI_TE_IMAGE_HEADER Te; +} EFI_IMAGE_OPTIONAL_HEADER_UNION; + +typedef union { + EFI_IMAGE_NT_HEADERS32 *Pe32; + EFI_IMAGE_NT_HEADERS64 *Pe32Plus; + EFI_TE_IMAGE_HEADER *Te; + EFI_IMAGE_OPTIONAL_HEADER_UNION *Union; +} EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION; + +#endif diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/Library/PeCoffLib.h b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/Library/PeCoffLib.h new file mode 100644 index 000000000..3590ce4c2 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/Library/PeCoffLib.h @@ -0,0 +1,392 @@ +/** @file + Provides services to load and relocate a PE/COFF image. + + The PE/COFF Loader Library abstracts the implementation of a PE/COFF loader for + IA-32, x86, IPF, and EBC processor types. The library functions are memory-based + and can be ported easily to any environment. + +Copyright (c) 2006 - 2008, Intel Corporation
+Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.
+All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef __BASE_PE_COFF_LIB_H__ +#define __BASE_PE_COFF_LIB_H__ + +#include +// +// Return status codes from the PE/COFF Loader services +// +#define IMAGE_ERROR_SUCCESS 0 +#define IMAGE_ERROR_IMAGE_READ 1 +#define IMAGE_ERROR_INVALID_PE_HEADER_SIGNATURE 2 +#define IMAGE_ERROR_INVALID_MACHINE_TYPE 3 +#define IMAGE_ERROR_INVALID_SUBSYSTEM 4 +#define IMAGE_ERROR_INVALID_IMAGE_ADDRESS 5 +#define IMAGE_ERROR_INVALID_IMAGE_SIZE 6 +#define IMAGE_ERROR_INVALID_SECTION_ALIGNMENT 7 +#define IMAGE_ERROR_SECTION_NOT_LOADED 8 +#define IMAGE_ERROR_FAILED_RELOCATION 9 +#define IMAGE_ERROR_FAILED_ICACHE_FLUSH 10 + +/** + Reads contents of a PE/COFF image. + + A function of this type reads contents of the PE/COFF image specified by FileHandle. The read + operation copies ReadSize bytes from the PE/COFF image starting at byte offset FileOffset into + the buffer specified by Buffer. The size of the buffer actually read is returned in ReadSize. + If FileOffset specifies an offset past the end of the PE/COFF image, a ReadSize of 0 is returned. + A function of this type must be registered in the ImageRead field of a PE_COFF_LOADER_IMAGE_CONTEXT + structure for the PE/COFF Loader Library service to function correctly. This function abstracts access + to a PE/COFF image so it can be implemented in an environment specific manner. For example, SEC and PEI + environments may access memory directly to read the contents of a PE/COFF image, and DXE or UEFI + environments may require protocol services to read the contents of PE/COFF image + stored on FLASH, disk, or network devices. + + If FileHandle is not a valid handle, then ASSERT(). + If ReadSize is NULL, then ASSERT(). + If Buffer is NULL, then ASSERT(). + + @param FileHandle Pointer to the file handle to read the PE/COFF image. + @param FileOffset Offset into the PE/COFF image to begin the read operation. + @param ReadSize On input, the size in bytes of the requested read operation. + On output, the number of bytes actually read. + @param Buffer Output buffer that contains the data read from the PE/COFF image. + + @retval RETURN_SUCCESS The specified portion of the PE/COFF image was read and the size + @retval RETURN_DEVICE_ERROR The specified portion of the PE/COFF image could not be read due + to a device error. + +**/ +typedef +RETURN_STATUS +(EFIAPI *PE_COFF_LOADER_READ_FILE)( + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer + ); + +/// +/// Context structure used while PE/COFF image is being loaded and relocated +/// +typedef struct { + /// + /// Is set by PeCoffLoaderGetImageInfo() to the ImageBase in the PE/COFF header + /// + PHYSICAL_ADDRESS ImageAddress; + /// + /// Is set by PeCoffLoaderGetImageInfo() to the SizeOfImage in the PE/COFF header. + /// Image size includes the size of Debug Entry if it is present. + /// + UINT64 ImageSize; + /// + /// Is set to zero by PeCoffLoaderGetImageInfo(). If DestinationAddress is non zero, + /// PeCoffLoaderRelocateImage() will relocate the image using this base address. + /// If the DestinationAddress is zero, the ImageAddress will be used as the base + /// address of relocation. + /// + PHYSICAL_ADDRESS DestinationAddress; + /// + /// PeCoffLoaderLoadImage() sets EntryPoint to to the entry point of the PE/COFF image. + /// + PHYSICAL_ADDRESS EntryPoint; + /// + /// Passed in by the caller to PeCoffLoaderGetImageInfo() and PeCoffLoaderLoadImage() + /// to abstract accessing the image from the library. + /// + PE_COFF_LOADER_READ_FILE ImageRead; + /// + /// Used as the FileHandle passed into the ImageRead function when it's called. + /// + VOID *Handle; + /// + /// Caller allocated buffer of size FixupDataSize that can be optionally allocated + /// prior to calling PeCoffLoaderRelocateImage(). + /// This buffer is filled with the information used to fix up the image. + /// The fixups have been applied to the image and this entry is just for information. + /// + VOID *FixupData; + /// + /// Is set by PeCoffLoaderGetImageInfo() to the Section Alignment in the PE/COFF header + /// If the image is a TE image, then this field is set to 0. + /// + UINT32 SectionAlignment; + /// + /// Set by PeCoffLoaderGetImageInfo() to offset to the PE/COFF header. + /// If the PE/COFF image does not start with a DOS header, this value is zero; + /// otherwise, it's the offset to the PE/COFF header. + /// + UINT32 PeCoffHeaderOffset; + /// + /// Set by PeCoffLoaderGetImageInfo() to the Relative Virtual Address of the debug directory + /// if it exists in the image + /// + UINT32 DebugDirectoryEntryRva; + /// + /// Set by PeCoffLoaderLoadImage() to CodeView area of the PE/COFF Debug directory. + /// + VOID *CodeView; + /// + /// Set by PeCoffLoaderLoadImage() to point to the PDB entry contained in the CodeView area. + /// The PdbPointer points to the filename of the PDB file used for source-level debug of + /// the image by a debugger. + /// + CHAR8 *PdbPointer; + /// + /// Is set by PeCoffLoaderGetImageInfo() to the Section Alignment in the PE/COFF header. + /// + UINTN SizeOfHeaders; + /// + /// Not used by this library class. Other library classes that layer on top of this library + /// class fill in this value as part of their GetImageInfo call. + /// This allows the caller of the library to know what type of memory needs to be allocated + /// to load and relocate the image. + /// + UINT32 ImageCodeMemoryType; + /// + /// Not used by this library class. Other library classes that layer on top of this library + /// class fill in this value as part of their GetImageInfo call. + /// This allows the caller of the library to know what type of memory needs to be allocated + /// to load and relocate the image + /// + UINT32 ImageDataMemoryType; + /// + /// Set by any of the library functions if they encounter an error. + /// + UINT32 ImageError; + /// + /// Set by PeCoffLoaderLoadImage() to indicate the size of FixupData that the caller must + /// allocate before calling PeCoffLoaderRelocateImage() + /// + UINTN FixupDataSize; + /// + /// Set by PeCoffLoaderGetImageInfo() to the machine type stored in the PE/COFF header + /// + UINT16 Machine; + /// + /// Set by PeCoffLoaderGetImageInfo() to the subsystem type stored in the PE/COFF header. + /// + UINT16 ImageType; + /// + /// Set by PeCoffLoaderGetImageInfo() to TRUE if the PE/COFF image does not contain + /// relocation information. + /// + BOOLEAN RelocationsStripped; + /// + /// Set by PeCoffLoaderGetImageInfo() to TRUE if the image is a TE image. + /// For a definition of the TE Image format, see the Platform Initialization Pre-EFI + /// Initialization Core Interface Specification. + /// + BOOLEAN IsTeImage; + /// + /// Set by PeCoffLoaderLoadImage() to the HII resource offset + /// if the image contains a custom PE/COFF resource with the type 'HII'; + /// otherwise, the entry remains to be 0. + /// + PHYSICAL_ADDRESS HiiResourceData; + /// + /// Private storage for implementation specific data. + /// + BOOLEAN IsFat; + UINT32 FatOffset; + UINT64 Context; +} PE_COFF_LOADER_IMAGE_CONTEXT; + +/** + Retrieves information about a PE/COFF image. + + Computes the PeCoffHeaderOffset, IsTeImage, ImageType, ImageAddress, ImageSize, + DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, and + DebugDirectoryEntryRva fields of the ImageContext structure. + If ImageContext is NULL, then return RETURN_INVALID_PARAMETER. + If the PE/COFF image accessed through the ImageRead service in the ImageContext + structure is not a supported PE/COFF image type, then return RETURN_UNSUPPORTED. + If any errors occur while computing the fields of ImageContext, + then the error status is returned in the ImageError field of ImageContext. + If the image is a TE image, then SectionAlignment is set to 0. + The ImageRead and Handle fields of ImageContext structure must be valid prior + to invoking this service. + + @param ImageContext Pointer to the image context structure that describes the PE/COFF + image that needs to be examined by this function. + + @retval RETURN_SUCCESS The information on the PE/COFF image was collected. + @retval RETURN_INVALID_PARAMETER ImageContext is NULL. + @retval RETURN_UNSUPPORTED The PE/COFF image is not supported. + +**/ +RETURN_STATUS +EFIAPI +PeCoffLoaderGetImageInfo ( + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ); + +/** + Applies relocation fixups to a PE/COFF image that was loaded with PeCoffLoaderLoadImage(). + + If the DestinationAddress field of ImageContext is 0, then use the ImageAddress field of + ImageContext as the relocation base address. Otherwise, use the DestinationAddress field + of ImageContext as the relocation base address. The caller must allocate the relocation + fixup log buffer and fill in the FixupData field of ImageContext prior to calling this function. + + The ImageRead, Handle, PeCoffHeaderOffset, IsTeImage, Machine, ImageType, ImageAddress, + ImageSize, DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, + DebugDirectoryEntryRva, EntryPoint, FixupDataSize, CodeView, PdbPointer, and FixupData of + the ImageContext structure must be valid prior to invoking this service. + + If ImageContext is NULL, then ASSERT(). + + Note that if the platform does not maintain coherency between the instruction cache(s) and the data + cache(s) in hardware, then the caller is responsible for performing cache maintenance operations + prior to transferring control to a PE/COFF image that is loaded using this library. + + @param ImageContext Pointer to the image context structure that describes the PE/COFF + image that is being relocated. + + @retval RETURN_SUCCESS The PE/COFF image was relocated. + Extended status information is in the ImageError field of ImageContext. + @retval RETURN_LOAD_ERROR The image in not a valid PE/COFF image. + Extended status information is in the ImageError field of ImageContext. + @retval RETURN_UNSUPPORTED A relocation record type is not supported. + Extended status information is in the ImageError field of ImageContext. + +**/ +RETURN_STATUS +EFIAPI +PeCoffLoaderRelocateImage ( + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ); + +/** + Loads a PE/COFF image into memory. + + Loads the PE/COFF image accessed through the ImageRead service of ImageContext into the buffer + specified by the ImageAddress and ImageSize fields of ImageContext. The caller must allocate + the load buffer and fill in the ImageAddress and ImageSize fields prior to calling this function. + The EntryPoint, FixupDataSize, CodeView, PdbPointer and HiiResourceData fields of ImageContext are computed. + The ImageRead, Handle, PeCoffHeaderOffset, IsTeImage, Machine, ImageType, ImageAddress, ImageSize, + DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, and DebugDirectoryEntryRva + fields of the ImageContext structure must be valid prior to invoking this service. + + If ImageContext is NULL, then ASSERT(). + + Note that if the platform does not maintain coherency between the instruction cache(s) and the data + cache(s) in hardware, then the caller is responsible for performing cache maintenance operations + prior to transferring control to a PE/COFF image that is loaded using this library. + + @param ImageContext Pointer to the image context structure that describes the PE/COFF + image that is being loaded. + + @retval RETURN_SUCCESS The PE/COFF image was loaded into the buffer specified by + the ImageAddress and ImageSize fields of ImageContext. + Extended status information is in the ImageError field of ImageContext. + @retval RETURN_BUFFER_TOO_SMALL The caller did not provide a large enough buffer. + Extended status information is in the ImageError field of ImageContext. + @retval RETURN_LOAD_ERROR The PE/COFF image is an EFI Runtime image with no relocations. + Extended status information is in the ImageError field of ImageContext. + @retval RETURN_INVALID_PARAMETER The image address is invalid. + Extended status information is in the ImageError field of ImageContext. + +**/ +RETURN_STATUS +EFIAPI +PeCoffLoaderLoadImage ( + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ); + + +/** + Reads contents of a PE/COFF image from a buffer in system memory. + + This is the default implementation of a PE_COFF_LOADER_READ_FILE function + that assumes FileHandle pointer to the beginning of a PE/COFF image. + This function reads contents of the PE/COFF image that starts at the system memory + address specified by FileHandle. The read operation copies ReadSize bytes from the + PE/COFF image starting at byte offset FileOffset into the buffer specified by Buffer. + The size of the buffer actually read is returned in ReadSize. + + If FileHandle is NULL, then ASSERT(). + If ReadSize is NULL, then ASSERT(). + If Buffer is NULL, then ASSERT(). + + @param FileHandle Pointer to base of the input stream + @param FileOffset Offset into the PE/COFF image to begin the read operation. + @param ReadSize On input, the size in bytes of the requested read operation. + On output, the number of bytes actually read. + @param Buffer Output buffer that contains the data read from the PE/COFF image. + + @retval RETURN_SUCCESS Data is read from FileOffset from the Handle into + the buffer. +**/ +RETURN_STATUS +EFIAPI +PeCoffLoaderImageReadFromMemory ( + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINTN *ReadSize, + OUT VOID *Buffer + ); + + +/** + Reapply fixups on a fixed up PE32/PE32+ image to allow virutal calling at EFI + runtime. + + This function reapplies relocation fixups to the PE/COFF image specified by ImageBase + and ImageSize so the image will execute correctly when the PE/COFF image is mapped + to the address specified by VirtualImageBase. RelocationData must be identical + to the FiuxupData buffer from the PE_COFF_LOADER_IMAGE_CONTEXT structure + after this PE/COFF image was relocated with PeCoffLoaderRelocateImage(). + + Note that if the platform does not maintain coherency between the instruction cache(s) and the data + cache(s) in hardware, then the caller is responsible for performing cache maintenance operations + prior to transferring control to a PE/COFF image that is loaded using this library. + + @param ImageBase Base address of a PE/COFF image that has been loaded + and relocated into system memory. + @param VirtImageBase The request virtual address that the PE/COFF image is to + be fixed up for. + @param ImageSize The size, in bytes, of the PE/COFF image. + @param RelocationData A pointer to the relocation data that was collected when the PE/COFF + image was relocated using PeCoffLoaderRelocateImage(). + +**/ +VOID +EFIAPI +PeCoffLoaderRelocateImageForRuntime ( + IN PHYSICAL_ADDRESS ImageBase, + IN PHYSICAL_ADDRESS VirtImageBase, + IN UINTN ImageSize, + IN VOID *RelocationData + ); + +/** + Unloads a loaded PE/COFF image from memory and releases its taken resource. + Releases any environment specific resources that were allocated when the image + specified by ImageContext was loaded using PeCoffLoaderLoadImage(). + + For NT32 emulator, the PE/COFF image loaded by system needs to release. + For real platform, the PE/COFF image loaded by Core doesn't needs to be unloaded, + this function can simply return RETURN_SUCCESS. + + If ImageContext is NULL, then ASSERT(). + + @param ImageContext Pointer to the image context structure that describes the PE/COFF + image to be unloaded. + + @retval RETURN_SUCCESS The PE/COFF image was unloaded successfully. +**/ +RETURN_STATUS +EFIAPI +PeCoffLoaderUnloadImage ( + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ); +#endif diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxDebugLib.h b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxDebugLib.h new file mode 100644 index 000000000..575c4b5b8 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxDebugLib.h @@ -0,0 +1,35 @@ +/* $Id: VBoxDebugLib.h $ */ +/** @file + * VBoxDebugLib.h - Debug and logging routines implemented by VBoxDebugLib. + */ + +/* + * Copyright (C) 2009 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +#ifndef ___VBoxPkg_VBoxDebugLib_h +#define ___VBoxPkg_VBoxDebugLib_h + +#include +#include "VBoxPkg.h" + +size_t VBoxPrintChar(int ch); +size_t VBoxPrintGuid(CONST EFI_GUID *pGuid); +size_t VBoxPrintHex(UINT64 uValue, size_t cbType); +size_t VBoxPrintHexDump(const void *pv, size_t cb); +size_t VBoxPrintString(const char *pszString); + +#endif + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxMemLayout.h b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxMemLayout.h new file mode 100644 index 000000000..d9dd7de3b --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxMemLayout.h @@ -0,0 +1,29 @@ +/* $Id: VBoxMemLayout.h $ */ +/** @file + * VBoxMemLayou.h - Constants defining the memory layout. (Merge with DevEFI?) + */ + +/* + * Copyright (C) 2009 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +#ifndef ___VBoxMemLayout_h +#define ___VBoxMemLayout_h + +#define VBOXSEC_STACK_BASE (1*1024*1024) +#define VBOXSEC_STACK_SIZE (128*1024) + +#endif + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxPkg.h b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxPkg.h new file mode 100644 index 000000000..8fcdb3e01 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/VBoxPkg.h @@ -0,0 +1,52 @@ +/* $Id: VBoxPkg.h $ */ +/** @file + * VBoxPkg.h - Common header, must be include before IPRT and VBox headers. + */ + +/* + * Copyright (C) 2009 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +#ifndef ___VBoxPkg_h +#define ___VBoxPkg_h + +/* + * IPRT configuration. + */ +#define IN_RING0 +/** @todo detect this */ +#if !defined(ARCH_BITS) || !defined(HC_ARCH_BITS) +# error "please add right bitness" +#endif + +/* + * VBox and IPRT headers. + */ +#include +#include +#ifdef _MSC_VER +# pragma warning ( disable : 4389) +# pragma warning ( disable : 4245) +# pragma warning ( disable : 4244) +#endif +#include +#ifdef _MSC_VER +# pragma warning ( default : 4244) +# pragma warning ( default : 4245) +# pragma warning ( default : 4389) +#endif + +#endif + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c new file mode 100644 index 000000000..cf1d9232a --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.c @@ -0,0 +1,123 @@ +/* $Id: VBoxDebugLib.c $ */ +/** @file + * VBoxDebugLib.c - Debug logging and assertions support routines using DevEFI. + */ + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include +#include +#include + +#include "VBoxDebugLib.h" +#include "DevEFI.h" + + + +VOID EFIAPI +DebugPrint(IN UINTN ErrorLevel, IN CONST CHAR8 *Format, ...) +{ + CHAR8 szBuf[256]; + VA_LIST va; + UINTN cch; + RTCCUINTREG SavedFlags; + + /* No pool noise, please. */ + if (ErrorLevel == DEBUG_POOL) + return; + + VA_START(va, Format); + cch = AsciiVSPrint(szBuf, sizeof(szBuf), Format, va); + VA_END(va); + + /* make sure it's terminated and doesn't end with a newline */ + if (cch >= sizeof(szBuf)) + cch = sizeof(szBuf) - 1; + while (cch > 0 && (szBuf[cch - 1] == '\n' || szBuf[cch - 1] == '\r')) + cch--; + szBuf[cch] = '\0'; + + SavedFlags = ASMIntDisableFlags(); + + VBoxPrintString("dbg/"); + VBoxPrintHex(ErrorLevel, sizeof(ErrorLevel)); + VBoxPrintChar(' '); + VBoxPrintString(szBuf); + VBoxPrintChar('\n'); + + ASMSetFlags(SavedFlags); + +} + + +VOID EFIAPI +DebugAssert(IN CONST CHAR8 *FileName, IN UINTN LineNumber, IN CONST CHAR8 *Description) +{ + RTCCUINTREG SavedFlags = ASMIntDisableFlags(); + + VBoxPrintString("EFI Assertion failed! File="); + VBoxPrintString(FileName ? FileName : ""); + VBoxPrintString(" line=0x"); + VBoxPrintHex(LineNumber, sizeof(LineNumber)); + VBoxPrintString("\nDescription: "); + VBoxPrintString(Description ? Description : ""); + + ASMOutU8(EFI_PANIC_PORT, 2); /** @todo fix this. */ + + ASMSetFlags(SavedFlags); +} + + +VOID * EFIAPI +DebugClearMemory(OUT VOID *Buffer, IN UINTN Length) +{ + return Buffer; +} + + +BOOLEAN EFIAPI +DebugAssertEnabled(VOID) +{ + return TRUE; +} + + +BOOLEAN EFIAPI +DebugPrintEnabled(VOID) +{ + /** @todo some PCD for this so we can disable it in release builds. */ + return TRUE; +} + + +BOOLEAN EFIAPI +DebugCodeEnabled(VOID) +{ + /** @todo ditto */ + return TRUE; +} + + +BOOLEAN EFIAPI +DebugClearMemoryEnabled(VOID) +{ + return FALSE; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf new file mode 100644 index 000000000..09ae4b76b --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf @@ -0,0 +1,68 @@ +# $Id: VBoxDebugLib.inf $ +## @file +# VBoxDebugLib - Debug logging and assertions support routines using DevEFI. +# + + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# +#/ + + + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = VBoxDebugLib + FILE_GUID = 549306AB-75C1-4585-8681-556EBB34C60C + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = DebugLib + +[Sources.common] + VBoxDebugLib.c + VBoxPrintChar.c + VBoxPrintGuid.c + VBoxPrintHex.c + VBoxPrintHexDump.c + VBoxPrintString.c + +[Packages] + MdePkg/MdePkg.dec + VBoxPkg/VBoxPkg.dec + +[LibraryClasses] + BaseLib + BaseMemoryLib + PrintLib + +[Guids] + # none + +[Ppis] + # none + +[Guids] + # none + +[Pcd.common] + # none + +[FixedPcd.common] + # none + +[FeaturePcd.common] + # none + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c new file mode 100644 index 000000000..1cc1a931b --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintChar.c @@ -0,0 +1,39 @@ +/* $Id: VBoxPrintChar.c $ */ +/** @file + * VBoxPrintChar.c - Implementation of the VBoxPrintChar() debug logging routine. + */ + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include "VBoxDebugLib.h" +#include "DevEFI.h" + + +/** + * Prints a char. + * @returns 1 + * @param ch The char to print. + */ +size_t VBoxPrintChar(int ch) +{ + ASMOutU8(EFI_DEBUG_PORT, (uint8_t)ch); + return 1; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c new file mode 100644 index 000000000..524f6deec --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintGuid.c @@ -0,0 +1,58 @@ +/* $Id: VBoxPrintGuid.c $ */ +/** @file + * VBoxPrintGuid.c - Implementation of the VBoxPrintGuid() debug logging routine. + */ + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + + + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include "VBoxDebugLib.h" +#include "DevEFI.h" + + +/** + * Prints a EFI GUID. + * + * @returns Number of bytes printed. + * + * @param pGuid The GUID to print + */ +size_t VBoxPrintGuid(CONST EFI_GUID *pGuid) +{ + VBoxPrintHex(pGuid->Data1, sizeof(pGuid->Data1)); + VBoxPrintChar('-'); + VBoxPrintHex(pGuid->Data2, sizeof(pGuid->Data2)); + VBoxPrintChar('-'); + VBoxPrintHex(pGuid->Data3, sizeof(pGuid->Data3)); + VBoxPrintChar('-'); + VBoxPrintHex(pGuid->Data4[0], sizeof(pGuid->Data4[0])); + VBoxPrintHex(pGuid->Data4[1], sizeof(pGuid->Data4[1])); + VBoxPrintChar('-'); + VBoxPrintHex(pGuid->Data4[2], sizeof(pGuid->Data4[2])); + VBoxPrintHex(pGuid->Data4[3], sizeof(pGuid->Data4[3])); + VBoxPrintHex(pGuid->Data4[4], sizeof(pGuid->Data4[4])); + VBoxPrintHex(pGuid->Data4[5], sizeof(pGuid->Data4[5])); + VBoxPrintHex(pGuid->Data4[6], sizeof(pGuid->Data4[6])); + VBoxPrintHex(pGuid->Data4[7], sizeof(pGuid->Data4[7])); + return 37; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c new file mode 100644 index 000000000..cd128cf2c --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHex.c @@ -0,0 +1,78 @@ +/* $Id: VBoxPrintHex.c $ */ +/** @file + * VBoxPrintHex.c - Implementation of the VBoxPrintHex() debug logging routine. + */ + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include "VBoxDebugLib.h" +#include "DevEFI.h" + + +/** + * Prints a char. + * @param ch The char to print. + */ +DECLINLINE(void) vboxPrintHexChar(int ch) +{ + ASMOutU8(EFI_DEBUG_PORT, (uint8_t)ch); +} + + +/** + * Print a hex number, up to 64-bit long. + * + * @returns Number of chars printed. + * + * @param uValue The value. + * @param cbType The size of the value type. + */ +size_t VBoxPrintHex(UINT64 uValue, size_t cbType) +{ + static const char s_szHex[17] = "0123456789abcdef"; + switch (cbType) + { + case 8: + vboxPrintHexChar(s_szHex[(uValue >> 60) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 56) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 52) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 48) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 44) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 40) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 36) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 32) & 0xf]); + case 4: + vboxPrintHexChar(s_szHex[(uValue >> 28) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 24) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 20) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 16) & 0xf]); + case 2: + vboxPrintHexChar(s_szHex[(uValue >> 12) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue >> 8) & 0xf]); + case 1: + vboxPrintHexChar(s_szHex[(uValue >> 4) & 0xf]); + vboxPrintHexChar(s_szHex[(uValue ) & 0xf]); + break; + } + return cbType * 2; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c new file mode 100644 index 000000000..ea258a664 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxDebugLib/VBoxPrintHexDump.c @@ -0,0 +1,97 @@ +/* $Id: VBoxPrintHexDump.c $ */ +/** @file + * VBoxPrintHex.c - Implementation of the VBoxPrintHex() debug logging routine. + */ + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include "VBoxDebugLib.h" +#include "DevEFI.h" +#include + + +/** + * Prints a char. + * @returns 1. + * @param ch The char to print. + */ +DECLINLINE(int) vboxPrintHexDumpChar(int ch) +{ + ASMOutU8(EFI_DEBUG_PORT, (uint8_t)ch); + return 1; +} + + +/** + * Prints a hex dump the specified memory block. + * + * @returns Number of bytes printed. + * + * @param pv The memory to dump. + * @param cb Number of bytes to dump. + */ +size_t VBoxPrintHexDump(const void *pv, size_t cb) +{ + size_t cchPrinted = 0; + uint8_t const *pb = (uint8_t const *)pv; + while (cb > 0) + { + unsigned i; + + /* the offset */ + cchPrinted += VBoxPrintHex((uintptr_t)pb, sizeof(pb)); + cchPrinted += VBoxPrintString(" "); + + /* the hex bytes value. */ + for (i = 0; i < 16; i++) + { + cchPrinted += vboxPrintHexDumpChar(i == 7 ? '-' : ' '); + if (i < cb) + cchPrinted += VBoxPrintHex(pb[i], 1); + else + cchPrinted += VBoxPrintString(" "); + } + + /* the printable chars */ + cchPrinted += VBoxPrintString(" "); + for (i = 0; i < 16 && i < cb; i++) + cchPrinted += vboxPrintHexDumpChar(pb[i] == ' ' + ? ' ' + : RT_C_IS_GRAPH(pb[i]) + ? pb[i] + : '.'); + + /* finally, the new line. */ + cchPrinted += vboxPrintHexDumpChar('\n'); + + /* + * Advance. + */ + if (cb <= 16) + break; + cb -= 16; + pb += 16; + } + + return cchPrinted; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c new file mode 100644 index 000000000..17546bb72 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.c @@ -0,0 +1,203 @@ +/* $Id: VBoxOemHookStatusCodeLib.c $ */ +/** @file + * DxeVBoxOemHookStatusCodeLib.c - Logging. + */ + + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include +#include +#include +#include +#include +#include +#if 0 /* See VBoxSecExtractDebugInfo */ +# include +#endif + +#include "VBoxDebugLib.h" +#include "DevEFI.h" + + + +EFI_STATUS EFIAPI +OemHookStatusCodeInitialize(VOID) +{ + VBoxPrintString("OemHookStatusCodeInitialize\n"); + return EFI_SUCCESS; +} + + +#if 0 /* vvl: With thbe new version the API changed a bit and VA_LIST isn't used any more. Before applying + * any changes here I would like to understand in which cases we need this help function. + * bird: Some components sent information in this format. Search for the UUID or EFI_DEBUG_INFO usage. + */ +/** + * Helper VBoxSecPeiReportStatusCode uses for catching some odd reports. + */ +static BOOLEAN +VBoxSecExtractDebugInfo(IN CONST EFI_STATUS_CODE_DATA *pData, + OUT UINT32 *puErrorLevel, + OUT VA_LIST *pVa, + OUT CHAR8 **ppszFormat) +{ + EFI_DEBUG_INFO *pDebugInfo; + + if ( !CompareGuid(&pData->Type, &gEfiStatusCodeSpecificDataGuid) + || pData->HeaderSize != sizeof(*pData) + || pData->Size <= sizeof(UINT64) * 12 + sizeof(EFI_DEBUG_INFO) + 1) + return FALSE; + + pDebugInfo = (EFI_DEBUG_INFO *)(pData + 1); + *pVa = (VA_LIST)(pDebugInfo + 1); + *ppszFormat = (CHAR8 *)((UINT64 *)pVa + 12); + return TRUE; +} +#endif + +/** Worker that dumps the raw data. */ +static void +VBoxOemHookStatusCodeReportRawDump(EFI_STATUS_CODE_TYPE Type, + EFI_STATUS_CODE_VALUE Value, + UINT32 Instance, + CONST EFI_GUID *CallerId) +{ + VBoxPrintString("Report: Type="); + VBoxPrintHex(Type, sizeof(Type)); + VBoxPrintString(" Value="); + VBoxPrintHex(Value, sizeof(Value)); + + VBoxPrintString(" Instance="); + VBoxPrintHex(Instance, sizeof(Instance)); + if (CallerId) + { + VBoxPrintString(" CallerId="); + VBoxPrintGuid(CallerId); + } + +#define CASE_PRINT(Head,Print,Tail) \ + case Head ## Print ## Tail : VBoxPrintString(" " #Print); break + switch (Type & EFI_STATUS_CODE_SEVERITY_MASK) /* quick guess work... */ + { + CASE_PRINT(EFI_ERROR_,MINOR,); + CASE_PRINT(EFI_ERROR_,MAJOR,); + CASE_PRINT(EFI_ERROR_,UNRECOVERED,); + CASE_PRINT(EFI_ERROR_,UNCONTAINED,); + } + switch (Type & EFI_STATUS_CODE_TYPE_MASK) /* quick guess work... */ + { + CASE_PRINT(EFI_,PROGRESS,_CODE); + CASE_PRINT(EFI_,ERROR,_CODE); + CASE_PRINT(EFI_,DEBUG,_CODE); + } +#undef CASE_PRINT + VBoxPrintChar('\n'); +} + + +EFI_STATUS EFIAPI +OemHookStatusCodeReport(IN EFI_STATUS_CODE_TYPE Type, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId OPTIONAL, + IN EFI_STATUS_CODE_DATA *Data OPTIONAL) +{ + /* + * Try figure out the data payload + */ + if (Data != NULL) + { + CHAR8 *pszFilename; + CHAR8 *pszDescription; + UINT32 uLine; + UINT32 uErrorLevel; + BASE_LIST bs; + CHAR8 *pszFormat; + + if (ReportStatusCodeExtractAssertInfo(Type, Value, Data, &pszFilename, + &pszDescription, &uLine)) + { + VBoxPrintString("Assertion Failed! Line=0x"); + VBoxPrintHex(uLine, sizeof(uLine)); + if (pszFilename) + { + VBoxPrintString(" File="); + VBoxPrintString(pszFilename); + } + if (pszDescription) + { + VBoxPrintString(" Desc="); + VBoxPrintString(pszDescription); + } + VBoxPrintChar('\n'); + } + else if ( ReportStatusCodeExtractDebugInfo(Data, &uErrorLevel, &bs, &pszFormat) +#if 0 /* See question at VBoxSecExtractDebugInfo. */ + || VBoxSecExtractDebugInfo(Data, &uErrorLevel, &va, &pszFormat) +#endif + ) + { + CHAR8 szBuf[128]; + UINTN cch; + + cch = AsciiBSPrint(szBuf, sizeof(szBuf), pszFormat, bs); + if (cch >= sizeof(szBuf)) + cch = sizeof(szBuf) - 1; + while ( cch > 0 + && ( szBuf[cch - 1] == '\n' + || szBuf[cch - 1] == '\r')) + cch--; + szBuf[cch] = '\0'; + + VBoxPrintString("DBG/"); + VBoxPrintHex(uErrorLevel, sizeof(uErrorLevel)); + VBoxPrintString(": "); + VBoxPrintString(szBuf); + VBoxPrintChar('\n'); + } + else + { + /* + * Unknown data, resort to raw dump of everything. + */ + VBoxOemHookStatusCodeReportRawDump(Type, Value, Instance, CallerId); + + VBoxPrintString("OemReport: Unknown data type "); + VBoxPrintGuid(&Data->Type); + VBoxPrintString(" (Size="); + VBoxPrintHex(Data->Size, sizeof(Data->Size)); + VBoxPrintString(" HeaderSize="); + VBoxPrintHex(Data->HeaderSize, sizeof(Data->HeaderSize)); + VBoxPrintString(")\n"); + if (Data->Size > 0 && Data->Size <= 128) + VBoxPrintHexDump(Data + 1, Data->Size); + } + } + /* + * No data, do a raw dump. + */ + else + VBoxOemHookStatusCodeReportRawDump(Type, Value, Instance, CallerId); + + return EFI_SUCCESS; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf new file mode 100644 index 000000000..e8a718526 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf @@ -0,0 +1,66 @@ +# $Id: VBoxOemHookStatusCodeLib.inf $ +## @file +# VBoxOemHookStatusCodeLib - Logging. +# + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# +#/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = VBoxOemHookStatusCodeLib + FILE_GUID = 2199AC76-067A-4DFC-B09F-9E8C02CE05B3 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = OemHookStatusCodeLib + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + +[Sources.common] + VBoxOemHookStatusCodeLib.c + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec + VBoxPkg/VBoxPkg.dec + +[LibraryClasses] + DebugLib + BaseLib + BaseMemoryLib + ReportStatusCodeLib + PrintLib + +[Guids] + # none + +[Ppis] + # none + +[Guids] + # none + +[Pcd.common] + # none + +[FixedPcd.common] + # none + +[FeaturePcd.common] + # none + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxLogo/VBoxLogo.inf b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxLogo/VBoxLogo.inf new file mode 100644 index 000000000..f6b11ac3b --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxLogo/VBoxLogo.inf @@ -0,0 +1,41 @@ +# $Id$ + +#* @file +# VBoxLogo.inf - Logo module declarations. +# + +# +# Copyright (C) 2009.2010 Sun Microsystems, Inc. +# +# Copyright (C) Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# +**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = VBoxLogo + FILE_GUID = 323afebe-cc60-11de-af38-4731b4e5bd74 + MODULE_TYPE = USER_DEFINED + VERSION_STRING = 1.0 + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Binaries.common] + BIN|VBoxLogo.bmp|* + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/Makefile b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/Makefile new file mode 100644 index 000000000..d473dafb7 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/Makefile @@ -0,0 +1,51 @@ +# $Id$ +#* @file +# Makefile - assembling the iso image for experimenting with EFI. +#/ +# +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# +#/ + +# +# Here we add modules to be burn on iso-image +# +SOURCES += VBoxInterceptorDxe.efi +SOURCES += VBoxMimicryDxe.efi + +ifeq ($(BUILD_ARCH), IA32) +ARCH_SUFFIX= +else +ARCH_SUFFIX=$(BUILD_ARCH) +endif + +BUILD_ARCH ?= IA32 +BUILD_DIR=$(WORKSPACE)/Build/VBoxPkg$(ARCH_SUFFIX)/DEBUG_UNIXGCC/$(BUILD_ARCH) + +ISO_DIR=efi-app +FILES_TO_ISO=$(foreach file, $(SOURCES), $(addprefix $(ISO_DIR)/, $(file))) + +DEST=efi-app.iso +all:${DEST} + +$(DEST):$(FILES_TO_ISO) + mkisofs -R -o $@ $(basename $@) + +$(ISO_DIR)/%.efi:$(BUILD_DIR)/%.efi + cp $< $@ + +clean: + $(RM) -rf ${DEST} $(FILES_TO_ISO) diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/efi-app/Readme.txt b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/efi-app/Readme.txt new file mode 100644 index 000000000..22e7a27fc --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxMisc/efi-app/Readme.txt @@ -0,0 +1,33 @@ +# $Id$ */ +#* @file +# Readme.txt - Some description about using this module. + + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +#/ +Here could be some help how to manage files on efi-app ISO + +VBoxInterceptor - intercepts calls to gBS and gRT, outputs a lot of traffics to dev_efi.e.l2, (please be pacient ;)) + Shell> load VBoxInterceptor.efi diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dec b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dec new file mode 100644 index 000000000..2af7c97b2 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dec @@ -0,0 +1,78 @@ +# $Id: VBoxPkg.dec $ +## @file +# VBoxPkg.dec - VirtualBox Package description. +# + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +#/ + +[Defines] + DEC_SPECIFICATION = 0x00010005 + PACKAGE_NAME = VBoxPkg + PACKAGE_GUID = D118A5AF-05C8-427E-8047-EF53092514B7 + PACKAGE_VERSION = 0.1 + +[Includes.common] + Include + +[Guids.common] +# gEfiPciExpressBaseAddressGuid = {0x3677d529, 0x326f, 0x4603, {0xa9, 0x26, 0xea, 0xac, 0xe0, 0x1d, 0xcb, 0xb0 }} + gEfiAcpiDescriptionGuid = {0x3c699197, 0x093c, 0x4c69, {0xb0, 0x6b, 0x12, 0x8a, 0xe3, 0x48, 0x1d, 0xc9 }} +# gEfiFlashMapHobGuid = { 0xb091e7d2, 0x5a0, 0x4198, {0x94, 0xf0, 0x74, 0xb7, 0xb8, 0xc5, 0x54, 0x59 }} + gVBoxVgaPkgTokenSpaceGuid = { 0xa3a8ce56, 0x4a07, 0x441f, {0xa3, 0xf5, 0x6f, 0x53, 0xdb, 0x9c, 0xb7, 0xd8}} + +# +# Various types of Platform Configuration Database (PCD) items. +# +[PcdsFixedAtBuild.common] + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0|UINT32|0x00001000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0|UINT32|0x00001001 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0|UINT32|0x00001002 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0|UINT32|0x00001003 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0|UINT32|0x00001004 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0|UINT32|0x00001005 + +## XXX - boot mode - gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1|UINT32|0x00001006 + +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoveryBase|0x0|UINT32|0x00001010 +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoverySize|0x0|UINT32|0x00001011 + +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareFdSize|0x0|UINT32|0x00001012 +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareFdSize|0x0|UINT32|0x00001012 +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFirmwareBlockSize|0|UINT32|0x00001013 + +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashNvStorageVariableBase|0x0|UINT32|0x00001014 +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashNvStorageFtwSpareBase|0x0|UINT32|0x00001015 +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashNvStorageFtwWorkingBase|0x0|UINT32|0x00001016 +# gEfiNt32PkgTokenSpaceGuid.PcdWinNtFdBaseAddress|0x0|UINT32|0x00001017 + +[PcdsDynamic.common] + # none yet + +[PcdsPatchableInModule.common] +## XXX - boot mode - gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1|UINT32|0x00001006 +[PcdsFeatureFlag.common] + gVBoxVgaPkgTokenSpaceGuid.PcdSupportGop|TRUE|BOOLEAN|0x00010004 + gVBoxVgaPkgTokenSpaceGuid.PcdSupportUga|FALSE|BOOLEAN|0x00010005 diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dsc b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dsc new file mode 100644 index 000000000..a49741f2f --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.dsc @@ -0,0 +1,418 @@ +# $Id: VBoxPkg.dsc $ +## @file +# VBoxPkg.dsc - VirtualBox Flash Device. +# + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +#/ + + +# -------------------------------------------------------------------- +# +# This file is based on: Ovmf/OvmfIA32.dsc +#/** @file +# EFI/Framework Open Virtual Machine Firmware (OVMF) platform +# +# Copyright (c) 2006 - 2009, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + PLATFORM_NAME = VBoxPkg + PLATFORM_GUID = 5a9e7754-d81b-49ea-85ad-69eaa7b1539b + PLATFORM_VERSION = 0.1 + DSC_ SPECIFICATION = 0x00010005 + OUTPUT_DIRECTORY = Build/VBoxPkg + SUPPORTED_ARCHITECTURES = IA32 + BUILD_TARGETS = DEBUG|RELEASE + SKUID_IDENTIFIER = DEFAULT + FLASH_DEFINITION = VBoxPkg/VBoxPkg.fdf + +################################################################################ +# +# SKU Identification section - list of all SKU IDs supported by this Platform. +# +################################################################################ +[SkuIds] + 0|DEFAULT + +################################################################################ +# +# Library Class section - list of all Library Classes needed by this Platform. +# +################################################################################ +[LibraryClasses.common] + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + #TimerLib|DuetPkg/Library/DuetTimerLib/DuetTimerLib.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf + CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf + #PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf + PeCoffLib|VBoxPkg/Library/VBoxPeCoffLib/VBoxPeCoffLib.inf + PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf + #PciIncompatibleDeviceSupportLib|IntelFrameworkModulePkg/Library/PciIncompatibleDeviceSupportLib/PciIncompatibleDeviceSupportLib.inf + CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + S3Lib|MdeModulePkg/Library/PeiS3LibNull/PeiS3LibNull.inf + RecoveryLib|MdeModulePkg/Library/PeiRecoveryLibNull/PeiRecoveryLibNull.inf + GenericBdsLib|VBoxPkg/Library/VBoxGenericBdsLib/VBoxGenericBdsLib.inf + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf + PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + #OemHookStatusCodeLib|IntelFrameworkModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + OemHookStatusCodeLib|VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf + SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf + MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + NvVarsFileLib|OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf + FileHandleLib|ShellPkg/Library/BaseFileHandleLib/BaseFileHandleLib.inf + +[LibraryClasses.common.SEC] + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + +[LibraryClasses.common.PEI_CORE] + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerLibIdt.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + OemHookStatusCodeLib|VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf + #OemHookStatusCodeLib|IntelFrameworkModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf + +[LibraryClasses.common.PEIM] + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerLibIdt.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + OemHookStatusCodeLib|VBoxPkg/Library/VBoxOemHookStatusCodeLib/VBoxOemHookStatusCodeLib.inf + #OemHookStatusCodeLib|IntelFrameworkModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf + PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf + ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf + +[LibraryClasses.common.DXE_CORE] + HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + +[LibraryClasses.common.DXE_RUNTIME_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf + +[LibraryClasses.common.UEFI_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + +[LibraryClasses.common.DXE_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf + IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf + UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf + DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf + PlatformBdsLib|OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf + +[LibraryClasses.common.UEFI_APPLICATION] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + +################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform. +# +################################################################################ +[PcdsFeatureFlag.common] + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseHardSerial|TRUE + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE + +[PcdsFixedAtBuild.common] + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize|1 + gEfiSioTokenSpaceGuid.PcdSerialRegisterBase|0x3F8 + gEfiSioTokenSpaceGuid.PcdSerialLineControl|0x07 + gEfiSioTokenSpaceGuid.PcdSerialBoudRate|115200 + + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize|0x200000 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize|0x10000 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashFvRecoveryBase|0xFFE00000 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashFvRecoverySize|0x00200000 + + gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler|0x10 + gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported|6 + gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxPeimPerFv|32 + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x400 + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x8000 + gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0xc000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0xc000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x2000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x10000 + + gEfiEdkModulePkgTokenSpaceGuid.PcdDxePcdDatabaseTraverseEnabled|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 + +[PcdsFeatureFlag.common] + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE + + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE + gVBoxVgaPkgTokenSpaceGuid.PcdSupportUga|FALSE + gVBoxVgaPkgTokenSpaceGuid.PcdSupportGop|TRUE + +[PcdsFixedAtBuild.common] + gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F + + +[PcdsDynamicDefault.common] + gEfiMdePkgTokenSpaceGuid.PcdFSBClock|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 + + +################################################################################ +# +# Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Platform +# +################################################################################ + +[PcdsDynamicDefault.common.DEFAULT] + +################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform. +# +################################################################################ +[Components.common] + # + # SEC Phase modules + # + OvmfPkg/Sec/SecMain.inf + + # + # PEI Phase modules + # + MdeModulePkg/Core/Pei/PeiMain.inf + MdeModulePkg/Universal/PCD/Pei/Pcd.inf { + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf + MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf { + + NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf + } + + OvmfPkg/PlatformPei/PlatformPei.inf { + + PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf + } + + + # + # DXE Phase modules + # + MdeModulePkg/Core/Dxe/DxeMain.inf { + + NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf + } + + IntelFrameworkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCodeRuntimeDxe.inf + MdeModulePkg/Universal/PCD/Dxe/Pcd.inf { + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + + MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf + IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf + MdeModulePkg/Universal/EbcDxe/EbcDxe.inf + PcAtChipsetPkg/8259InterruptControllerDxe/8259.inf + UefiCpuPkg/CpuIoDxe/CpuIo.inf + UefiCpuPkg/CpuDxe/CpuDxe.inf + PcAtChipsetPkg/8254TimerDxe/8254Timer.inf + PcAtChipsetPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf + IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf + PcAtChipsetPkg/KbcResetDxe/Reset.inf + MdeModulePkg/Universal/Metronome/Metronome.inf { + + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + #TimerLib|DuetPkg/Library/DuetTimerLib/DuetTimerLib.inf + } + + PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf { + + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + #TimerLib|DuetPkg/Library/DuetTimerLib/DuetTimerLib.inf + } + + IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf { + + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + #TimerLib|DuetPkg/Library/DuetTimerLib/DuetTimerLib.inf + } + + OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf { + + PlatformFvbLib|OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.inf + } + + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf + MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf + MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf + MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + MdeModulePkg/Universal/PrintDxe/PrintDxe.inf + MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf + MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf + IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf + PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + + # VBOX + VBoxPkg/VBoxFsDxe/VBoxIso9660.inf + VBoxPkg/VBoxFsDxe/VBoxHfs.inf + VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf + VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf + VBoxPkg/VBoxSysTables/VBoxSysTables.inf + VBoxPkg/AcpiTables/AcpiTables.inf + # VBOX end + IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf + + # + # ISA Support + # + PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf + IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf + IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf + IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf + IntelFrameworkModulePkg/Bus/Isa/IsaFloppyDxe/IsaFloppyDxe.inf + + # + # ACPI Support + # + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + + # + # Don't include it to fdf + VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf + + # + # add -DVBOX + # +[BuildOptions.common] + GCC:*_*_*_CC_FLAGS = -DVBOX -DARCH_BITS=32 -DHC_ARCH_BITS=32 + # + # mingw set 0x4000000 as a default image base that is the reason + # PCD module loaded in the middle of space grub supposed to load + # boot images. + # this base address shoosen looking at + # Shell> memmap + # in the place where Image.c locates the rest of the modules. + GCC:*_*_*_DLINK_FLAGS = --image-base 0x1f000000 + INTEL:*_*_*_CC_FLAGS = -DVBOX -DARCH_BITS=32 -DHC_ARCH_BITS=32 + MSFT:*_*_*_CC_FLAGS = -DVBOX -DARCH_BITS=32 -DHC_ARCH_BITS=32 diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.fdf b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.fdf new file mode 100644 index 000000000..cda5d1b13 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkg.fdf @@ -0,0 +1,374 @@ +# $Id: VBoxPkg.fdf $ +## @file +# VBoxPkg.fdf - VirtualBox Flash Device. +# + + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# + + +# -------------------------------------------------------------------- +# This file is based on: Ovmf/Ovmf.fdf +# +# Open Virtual Machine Firmware: FDF +# +# Copyright (c) 2006 - 2009, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# + +################################################################################ +# +# FD Section +# The [FD] Section is made up of the definition statements and a +# description of what goes into the Flash Device Image. Each FD section +# defines one flash "device" image. A flash device image may be one of +# the following: Removable media bootable image (like a boot floppy +# image,) an Option ROM image (that would be "flashed" into an add-in +# card,) a System "Flash" image (that would be burned into a system's +# flash) or an Update ("Capsule") image that will be used to update and +# existing system flash. +# +################################################################################ +[FD.VBOX] +BaseAddress = 0xFFE00000 # The base address of the FLASH Device. +Size = 0x001f0000 # The size in bytes of the FLASH Device +ErasePolarity = 1 +BlockSize = 0x10000 +NumBlocks = 0x1f + +################################################################################ +# +# Following are lists of FD Region layout which correspond to the locations of different +# images within the flash device. +# +# Regions must be defined in ascending order and may not overlap. +# +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by +# the pipe "|" character, followed by the size of the region, also in hex with the leading +# "0x" characters. Like: +# Offset|Size +# PcdOffsetCName|PcdSizeCName +# RegionType +# +################################################################################ +0x0|0x1F0000 +gEfiUnixPkgTokenSpaceGuid.PcdUnixFlashFvRecoveryBase|gEfiUnixPkgTokenSpaceGuid.PcdUnixFlashFvRecoverySize +FV = MAINFV + +################################################################################ +# +# FV Section +# +# [FV] section is used to define what components or modules are placed within a flash +# device file. This section also defines order the components and modules are positioned +# within the image. The [FV] section consists of define statements, set statements and +# module statements. +# +################################################################################ +[FV.DXEFV] +BlockSize = 0x1000 +FvAlignment = 16 #FV alignment and FV attributes setting. +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE + +# +# Files to be placed in DXEFV +# +# This firmware volume will have files placed in it uncompressed, +# and then then entire firmware volume will be compressed in a +# single compression operation in order to achieve better +# overall compression. +# + +APRIORI DXE { + INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf +} + +# +# DXE Phase modules +# +INF MdeModulePkg/Core/Dxe/DxeMain.inf + +INF IntelFrameworkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCodeRuntimeDxe.inf +INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf + +INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf +INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf +INF IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf +INF MdeModulePkg/Universal/EbcDxe/EbcDxe.inf +INF PcAtChipsetPkg/8259InterruptControllerDxe/8259.inf +INF UefiCpuPkg/CpuIoDxe/CpuIo.inf +INF UefiCpuPkg/CpuDxe/CpuDxe.inf +INF PcAtChipsetPkg/8254TimerDxe/8254Timer.inf +INF PcAtChipsetPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf +INF IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf +INF PcAtChipsetPkg/KbcResetDxe/Reset.inf +INF MdeModulePkg/Universal/Metronome/Metronome.inf +INF PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf +#INF PcAtChipsetPkg/PcRtc/RealTimeClock.inf + +INF OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf +INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf +INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf +INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf +INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf +INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf +INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf +INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf +INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf +INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +INF IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf +INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf +INF MdeModulePkg/Universal/PrintDxe/PrintDxe.inf +INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf +INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf +INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf +#INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf +#INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf +INF IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf +INF PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf +INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf +INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + +# VBOX +INF VBoxPkg/VBoxFsDxe/VBoxIso9660.inf +INF VBoxPkg/VBoxFsDxe/VBoxHfs.inf +INF VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf +INF VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf +INF VBoxPkg/VBoxSysTables/VBoxSysTables.inf +INF RuleOverride=ACPITABLE VBoxPkg/AcpiTables/AcpiTables.inf +#INF VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf +# VBOX end +#INF IntelFrameworkModulePkg/Universal/Console/VgaClassDxe/VgaClassDxe.inf + +INF PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf +INF IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf +INF IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf +INF IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf +INF IntelFrameworkModulePkg/Bus/Isa/IsaFloppyDxe/IsaFloppyDxe.inf + +INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf +INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + +INF FatBinPkg/EnhancedFatDxe/Fat.inf +INF EdkShellBinPkg/FullShell/FullShell.inf +#FILE DRIVER = 961578FE-B6B7-44c3-AF35-6BC705CD2B1F { +# SECTION PE32 = FatBinPkg/EnhancedFatDxe/Ia32/Fat.efi +# } +# +#FILE APPLICATION = c57ad6b7-0515-40a8-9d21-551652854e37 { +# SECTION COMPRESS PI_STD { +# SECTION GUIDED { +# SECTION PE32 = EdkShellBinPkg/FullShell/Ia32/Shell_Full.efi +# } +# } +# } + +FILE FREEFORM = 7BB28B99-61BB-11D5-9A5D-0090273FC14D { + SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE { # LzmaCompress + SECTION RAW = VBoxPkg/VBoxLogo/VBoxLogo.bmp + } + } + +################################################################################ + +[FV.MAINFV] +FvAlignment = 16 +ERASE_POLARITY = 1 +MEMORY_MAPPED = TRUE +STICKY_WRITE = TRUE +LOCK_CAP = TRUE +LOCK_STATUS = TRUE +WRITE_DISABLED_CAP = TRUE +WRITE_ENABLED_CAP = TRUE +WRITE_STATUS = TRUE +WRITE_LOCK_CAP = TRUE +WRITE_LOCK_STATUS = TRUE +READ_DISABLED_CAP = TRUE +READ_ENABLED_CAP = TRUE +READ_STATUS = TRUE +READ_LOCK_CAP = TRUE +READ_LOCK_STATUS = TRUE + +# +# Files to be placed in MAINFV +# +# This firmware volume will have all the files placed in it which +# must not be compressed at the initial boot phase. The only +# exception to this is the compressed 'DXEFV'. +# + +APRIORI PEI { + INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf +} + +# +# SEC Phase modules +# +INF OvmfPkg/Sec/SecMain.inf +#INF VBoxPkg/VBoxSec/VBoxSec.inf + +# +# PEI Phase modules +# +INF MdeModulePkg/Core/Pei/PeiMain.inf +INF RuleOverride=NORELOC MdeModulePkg/Universal/PCD/Pei/Pcd.inf +INF RuleOverride=NORELOC IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf +INF RuleOverride=NORELOC OvmfPkg/PlatformPei/PlatformPei.inf +INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf + +# +# This file contains the compressed 'DXEFV', which is compressed +# in a single compression operation in order to achieve better +# overall compression. +# +FILE FV_IMAGE = 20bc8ac9-94d1-4208-ab28-5d673fd73486 { + SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE { # LzmaCompress + SECTION FV_IMAGE = DXEFV + } + } + +#INF RuleOverride=RESET_VECTOR OvmfPkg/ResetVector/Bin/ResetVector.inf + +################################################################################ +# +# Rules are use with the [FV] section's module INF type to define +# how an FFS file is created for a given INF file. The following Rule are the default +# rules for the different module type. User can add the customized rules to define the +# content of the FFS file. +# +################################################################################ + +[Rule.Common.PEI_CORE] + FILE PEI_CORE = $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING ="$(MODULE_NAME)" Optional + VERSION STRING ="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.SEC] + FILE SEC = $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING ="$(MODULE_NAME)" Optional + VERSION STRING ="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.PEIM] + FILE PEIM = $(NAMED_GUID) { + PEI_DEPEX PEI_DEPEX Optional |.depex + PE32 PE32 Align=32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.PEIM.NORELOC] + FILE PEIM = $(NAMED_GUID) RELOCS_STRIPPED { + PEI_DEPEX PEI_DEPEX Optional |.depex + TE TE |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } +[Rule.Common.PEIM.TIANOCOMPRESSED] + FILE PEIM = $(NAMED_GUID) { + PEI_DEPEX PEI_DEPEX Optional |.depex + GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE { + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + } + +[Rule.Common.DXE_CORE] + FILE DXE_CORE = $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.UEFI_DRIVER] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional |.depex + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.DXE_DRIVER] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional |.depex + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.DXE_RUNTIME_DRIVER] + FILE DRIVER = $(NAMED_GUID) { + DXE_DEPEX DXE_DEPEX Optional |.depex + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.UEFI_APPLICATION] + FILE APPLICATION = $(NAMED_GUID) { + PE32 PE32 |.efi + UI STRING="$(MODULE_NAME)" Optional + VERSION STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER) + } + +[Rule.Common.USER_DEFINED.ACPITABLE] + FILE FREEFORM = $(NAMED_GUID) { + RAW ACPI |.acpi + RAW ASL |.aml + } + +[Rule.Common.SEC.RESET_VECTOR] + FILE RAW = $(NAMED_GUID) { + RAW RAW |.raw + } + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkgX64.dsc b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkgX64.dsc new file mode 100644 index 000000000..b2b7c916a --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxPkgX64.dsc @@ -0,0 +1,382 @@ +# $Id: VBoxPkgX64.dsc $ + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +#/ + +#/** @file +# EFI/Framework Open Virtual Machine Firmware (OVMF) platform +# +# Copyright (c) 2006 - 2009, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + PLATFORM_NAME = VBoxPkg + PLATFORM_GUID = 5a9e7754-d81b-49ea-85ad-69eaa7b1539b + PLATFORM_VERSION = 0.1 + DSC_ SPECIFICATION = 0x00010005 + OUTPUT_DIRECTORY = Build/VBoxPkgX64 + SUPPORTED_ARCHITECTURES = X64 + BUILD_TARGETS = DEBUG|RELEASE + SKUID_IDENTIFIER = DEFAULT + FLASH_DEFINITION = VBoxPkg/VBoxPkg.fdf + +################################################################################ +# +# SKU Identification section - list of all SKU IDs supported by this Platform. +# +################################################################################ +[SkuIds] + 0|DEFAULT + +################################################################################ +# +# Library Class section - list of all Library Classes needed by this Platform. +# +################################################################################ +[LibraryClasses.common] + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf + CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf + PeCoffLib|VBoxPkg/Library/VBoxPeCoffLib/VBoxPeCoffLib.inf + PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf + CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf + GenericBdsLib|VBoxPkg/Library/VBoxGenericBdsLib/VBoxGenericBdsLib.inf + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf + PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + OemHookStatusCodeLib|IntelFrameworkModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf + MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf + NvVarsFileLib|OvmfPkg/Library/NvVarsFileLib/NvVarsFileLib.inf + FileHandleLib|ShellPkg/Library/BaseFileHandleLib/BaseFileHandleLib.inf + +[LibraryClasses.common.SEC] + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + +[LibraryClasses.common.PEI_CORE] + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerLibIdt.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + OemHookStatusCodeLib|IntelFrameworkModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + +[LibraryClasses.common.PEIM] + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf + HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf + PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerLibIdt.inf + PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf + MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf + PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf + OemHookStatusCodeLib|IntelFrameworkModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + PeiResourcePublicationLib|MdePkg/Library/PeiResourcePublicationLib/PeiResourcePublicationLib.inf + ExtractGuidedSectionLib|MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.inf + +[LibraryClasses.common.DXE_CORE] + HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + +[LibraryClasses.common.DXE_RUNTIME_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf + +[LibraryClasses.common.UEFI_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + +[LibraryClasses.common.DXE_DRIVER] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf + IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf + UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf + DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf + PlatformBdsLib|OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf + +[LibraryClasses.common.UEFI_APPLICATION] + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf + DebugLib|VBoxPkg/Library/VBoxDebugLib/VBoxDebugLib.inf + #DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf + +################################################################################ +# +# Pcd Section - list of all EDK II PCD Entries defined by this Platform. +# +################################################################################ +[PcdsFeatureFlag.common] + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseHardSerial|TRUE + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial|TRUE + +[PcdsFixedAtBuild.common] + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize|1 + gEfiSioTokenSpaceGuid.PcdSerialRegisterBase|0x3F8 + gEfiSioTokenSpaceGuid.PcdSerialLineControl|0x07 + gEfiSioTokenSpaceGuid.PcdSerialBoudRate|115200 + + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize|0x200000 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize|0x10000 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashFvRecoveryBase|0xFFE00000 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashFvRecoverySize|0x00200000 + + gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler|0x10 + gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxFvSupported|6 + gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreMaxPeimPerFv|32 + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x400 + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxHardwareErrorVariableSize|0x8000 + gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize|0xc000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0xc000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x2000 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x10000 + + gEfiEdkModulePkgTokenSpaceGuid.PcdDxePcdDatabaseTraverseEnabled|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 + +[PcdsFeatureFlag.common] + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress|FALSE + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode|FALSE + + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE + gOptionRomPkgTokenSpaceGuid.PcdSupportGop|TRUE + gOptionRomPkgTokenSpaceGuid.PcdSupportUga|FALSE + +[PcdsFixedAtBuild.common] + gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x8000004F + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2F + + +################################################################################ +# +# Pcd Dynamic Section - list of all EDK II PCD Entries defined by this Platform +# +################################################################################ + +[PcdsDynamicDefault.common] + gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 + + +################################################################################ +# +# Components Section - list of all EDK II Modules needed by this Platform. +# +################################################################################ +[Components.common] + # + # SEC Phase modules + # + OvmfPkg/Sec/SecMain.inf + + # + # PEI Phase modules + # + MdeModulePkg/Core/Pei/PeiMain.inf + MdeModulePkg/Universal/PCD/Pei/Pcd.inf { + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf + MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf { + + NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf + } + + OvmfPkg/PlatformPei/PlatformPei.inf { + + PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf + } + + # + # DXE Phase modules + # + MdeModulePkg/Core/Dxe/DxeMain.inf { + + NULL|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf + } + + IntelFrameworkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCodeRuntimeDxe.inf + MdeModulePkg/Universal/PCD/Dxe/Pcd.inf { + + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf + } + + MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf + IntelFrameworkModulePkg/Universal/DataHubDxe/DataHubDxe.inf + MdeModulePkg/Universal/EbcDxe/EbcDxe.inf + PcAtChipsetPkg/8259InterruptControllerDxe/8259.inf + UefiCpuPkg/CpuIoDxe/CpuIo.inf + UefiCpuPkg/CpuDxe/CpuDxe.inf + PcAtChipsetPkg/8254TimerDxe/8254Timer.inf + PcAtChipsetPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf + IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf + PcAtChipsetPkg/KbcResetDxe/Reset.inf + MdeModulePkg/Universal/Metronome/Metronome.inf { + + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + } + + PcAtChipsetPkg/PcatRealTimeClockRuntimeDxe/PcatRealTimeClockRuntimeDxe.inf { + + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + } + + IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf { + + TimerLib|OvmfPkg/Library/AcpiTimerLib/AcpiTimerLib.inf + } + + OvmfPkg/EmuVariableFvbRuntimeDxe/Fvb.inf { + + PlatformFvbLib|OvmfPkg/Library/EmuVariableFvbLib/EmuVariableFvbLib.inf + } + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf + MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf + MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf + MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf + MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf + MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf + MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf + MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf + MdeModulePkg/Universal/PrintDxe/PrintDxe.inf + MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf + MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf + MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf + MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf + MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf + IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf + PcAtChipsetPkg/Bus/Pci/IdeControllerDxe/IdeControllerDxe.inf + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf + + # VBOX + VBoxPkg/VBoxFsDxe/VBoxIso9660.inf + VBoxPkg/VBoxFsDxe/VBoxHfs.inf + VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf + VBoxPkg/VBoxVgaDxe/VBoxVgaDxe.inf + VBoxPkg/VBoxSysTables/VBoxSysTables.inf + VBoxPkg/AcpiTables/AcpiTables.inf + # VBOX end + + # + # ISA Support + # + PcAtChipsetPkg/IsaAcpiDxe/IsaAcpi.inf + IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf + IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf + IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf + IntelFrameworkModulePkg/Bus/Isa/IsaFloppyDxe/IsaFloppyDxe.inf + + # + # ACPI Support + # + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + + # + # Don't include it to fdf + VBoxPkg/VBoxInterceptorDxe/VBoxInterceptorDxe.inf + VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf + +[BuildOptions.common] + GCC:*_*_*_CC_FLAGS = -DVBOX -DARCH_BITS=64 -DHC_ARCH_BITS=64 + GCC:*_*_*_DLINK_FLAGS = --image-base 0x1f000000 + INTEL:*_*_*_CC_FLAGS = -DVBOX -DARCH_BITS=64 -DHC_ARCH_BITS=64 + MSFT:*_*_*_CC_FLAGS = -DVBOX -DARCH_BITS=64 -DHC_ARCH_BITS=64 diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c new file mode 100644 index 000000000..361b47f42 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.c @@ -0,0 +1,655 @@ +/* $Id: VBoxVgaMiniPortDxe.c $ */ +/** @file + * VBoxVgaMiniPortDxe.c - VgaMiniPort Protocol Implementation. + */ + + +/* + * Copyright (C) 2009-2010 Sun Microsystems, Inc. + * + * 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. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa + * Clara, CA 95054 USA or visit http://www.sun.com if you need + * additional information or have any questions. + */ + + +/******************************************************************************* +* Header Files * +*******************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "VBoxPkg.h" +#include "iprt/asm.h" +#include "VBoxVgaFonts.h" + + +/******************************************************************************* +* Structures and Typedefs * +*******************************************************************************/ +/** + * Instance data for a VGA device this driver handles. + */ +typedef struct VBOXVGAMINIPORT +{ + /** The VGA Mini Port Protocol. */ + EFI_VGA_MINI_PORT_PROTOCOL VgaMiniPort; + /** Magic value, VBOX_VGA_MINI_PORT_MAGIC. */ + UINT32 u32Magic; + /** The controller handle of the device. */ + EFI_HANDLE hController; + /** The PciIo protocol for the device. */ + EFI_PCI_IO_PROTOCOL *pPciIo; +} VBOXVGAMINIPORT; +/** Pointer to a VBOXVGAMINIPORT structure. */ +typedef VBOXVGAMINIPORT *PVBOXVGAMINIPORT; + +/** VBOXVGAMINIPORT::u32Magic value (Isaac Asimov). */ +#define VBOX_VGA_MINI_PORT_MAGIC 0x19200102 +/** VBOXVGAMINIPORT::u32Magic dead value. */ +#define VBOX_VGA_MINI_PORT_MAGIC_DEAD 0x19920406 + + +/******************************************************************************* +* Internal Functions * +*******************************************************************************/ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortDB_Supported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL); +static EFI_STATUS EFIAPI +VBoxVgaMiniPortDB_Start(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL); +static EFI_STATUS EFIAPI +VBoxVgaMiniPortDB_Stop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL); + + +static EFI_STATUS EFIAPI +VBoxVgaMiniPortVMP_SetMode(IN EFI_VGA_MINI_PORT_PROTOCOL *This, IN UINTN ModeNumber); + + +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN_GetDriverName(IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, OUT CHAR16 **DriverName); +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN_GetControllerName(IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, OUT CHAR16 **ControllerName); + + +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN2_GetDriverName(IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN CHAR8 *Language, OUT CHAR16 **DriverName); +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN2_GetControllerName(IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, OUT CHAR16 **ControllerName); + + +/******************************************************************************* +* Global Variables * +*******************************************************************************/ +/** EFI Driver Binding Protocol. */ +static EFI_DRIVER_BINDING_PROTOCOL g_VBoxVgaMiniPortDB = +{ + VBoxVgaMiniPortDB_Supported, + VBoxVgaMiniPortDB_Start, + VBoxVgaMiniPortDB_Stop, + /* .Version = */ 1, /* One higher than Pci/VgaMiniPortDxe. */ + /* .ImageHandle = */ NULL, + /* .DriverBindingHandle = */ NULL +}; + +/** EFI Component Name Protocol. */ +static const EFI_COMPONENT_NAME_PROTOCOL g_VBoxVgaMiniPortCN = +{ + VBoxVgaMiniPortCN_GetDriverName, + VBoxVgaMiniPortCN_GetControllerName, + "eng" +}; + +/** EFI Component Name 2 Protocol. */ +static const EFI_COMPONENT_NAME2_PROTOCOL g_VBoxVgaMiniPortCN2 = +{ + VBoxVgaMiniPortCN2_GetDriverName, + VBoxVgaMiniPortCN2_GetControllerName, + "en" +}; + +/** Driver name translation table. */ +static CONST EFI_UNICODE_STRING_TABLE g_aVBoxMiniPortDriverLangAndNames[] = +{ + { "eng;en", L"PCI VGA Mini Port Driver" }, + { NULL, NULL } +}; + + + +/** + * VBoxVgaMiniPort entry point. + * + * @returns EFI status code. + * + * @param ImageHandle The image handle. + * @param SystemTable The system table pointer. + */ +EFI_STATUS EFIAPI +DxeInitializeVBoxVgaMiniPort(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) +{ + EFI_STATUS rc; + DEBUG((DEBUG_INFO, "DxeInitializeVBoxVgaMiniPort\n")); + + rc = EfiLibInstallDriverBindingComponentName2(ImageHandle, SystemTable, + &g_VBoxVgaMiniPortDB, ImageHandle, + &g_VBoxVgaMiniPortCN, &g_VBoxVgaMiniPortCN2); + ASSERT_EFI_ERROR(rc); + return rc; +} + +/** + * @copydoc EFI_DRIVER_BINDING_SUPPORTED + */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortDB_Supported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL) +{ + EFI_STATUS rcRet = EFI_UNSUPPORTED; + EFI_PCI_IO_PROTOCOL *pPciIo; + EFI_STATUS rc; + + DEBUG((DEBUG_INFO, "%a: Controller=%p\n", __FUNCTION__, ControllerHandle)); + + /* + * To perform the test we need to check some PCI configuration registers, + * just read all the standard ones to make life simpler. + */ + rc = gBS->OpenProtocol(ControllerHandle, &gEfiPciIoProtocolGuid, (VOID **)&pPciIo, + This->DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + if (!EFI_ERROR(rc)) + { + PCI_TYPE00 CfgRegs; + + rc = pPciIo->Pci.Read(pPciIo, + EfiPciIoWidthUint32, + 0 /* Offset */, + sizeof(CfgRegs) / sizeof(UINT32) /* Count */ , + &CfgRegs); + if (!EFI_ERROR(rc)) + { + /* + * Perform the test. + */ + if (IS_PCI_VGA(&CfgRegs)) + { +#if 0 /** @todo this doesn't quite work with our DevVGA since it doesn't flag I/O access. */ + if ( CfgRegs.Hdr.Command & (PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS) + == (PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS)) +#else + if (1) +#endif + { + DEBUG((DEBUG_INFO, "%a: Found supported VGA device! (VendorId=%x DeviceId=%x)\n", + __FUNCTION__, CfgRegs.Hdr.VendorId, CfgRegs.Hdr.DeviceId)); + rcRet = EFI_SUCCESS; + } + else + DEBUG((DEBUG_INFO, "%a: VGA device not enabled! (VendorId=%x DeviceId=%x)\n", + __FUNCTION__, CfgRegs.Hdr.VendorId, CfgRegs.Hdr.DeviceId)); + } + else + DEBUG((DEBUG_INFO, "%a: Not VGA (Class=%x,%x,%x VendorId=%x DeviceId=%x)\n", + __FUNCTION__, CfgRegs.Hdr.ClassCode[0], CfgRegs.Hdr.ClassCode[1], + CfgRegs.Hdr.ClassCode[2], CfgRegs.Hdr.VendorId, CfgRegs.Hdr.DeviceId)); + } + else + DEBUG((DEBUG_INFO, "%a: pPciIo->Pci.Read -> %r\n", __FUNCTION__, rc)); + + gBS->CloseProtocol(ControllerHandle, &gEfiPciIoProtocolGuid, This->DriverBindingHandle, ControllerHandle); + } + else + DEBUG((DEBUG_INFO, "%a: PciIoProtocol -> %r\n", __FUNCTION__, rc)); + return rcRet; +} + +/** + * @copydoc EFI_DRIVER_BINDING_START + */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortDB_Start(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL) +{ + EFI_STATUS rc; + EFI_PCI_IO_PROTOCOL *pPciIo; + + DEBUG((DEBUG_INFO, "%a\n", __FUNCTION__)); + + /* + * We need the PCI I/O abstraction protocol. + */ + rc = gBS->OpenProtocol(ControllerHandle, &gEfiPciIoProtocolGuid, (VOID **)&pPciIo, + This->DriverBindingHandle, ControllerHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); + if (!EFI_ERROR(rc)) + { + /* + * Allocate and initialize the instance data. + */ + PVBOXVGAMINIPORT pThisDev; + rc = gBS->AllocatePool(EfiBootServicesData, sizeof(*pThisDev), (VOID **)&pThisDev); + if (!EFI_ERROR(rc)) + { + pThisDev->VgaMiniPort.SetMode = VBoxVgaMiniPortVMP_SetMode; + pThisDev->VgaMiniPort.VgaMemoryOffset = 0x000b8000; + pThisDev->VgaMiniPort.CrtcAddressRegisterOffset = 0x03d4; + pThisDev->VgaMiniPort.CrtcDataRegisterOffset = 0x03d5; + pThisDev->VgaMiniPort.VgaMemoryBar = EFI_PCI_IO_PASS_THROUGH_BAR; + pThisDev->VgaMiniPort.CrtcAddressRegisterBar = EFI_PCI_IO_PASS_THROUGH_BAR; + pThisDev->VgaMiniPort.CrtcDataRegisterBar = EFI_PCI_IO_PASS_THROUGH_BAR; + pThisDev->VgaMiniPort.MaxMode = 2; + pThisDev->u32Magic = VBOX_VGA_MINI_PORT_MAGIC; + pThisDev->hController = ControllerHandle; + pThisDev->pPciIo = pPciIo; + + /* + * Register the VGA Mini Port Protocol. + */ + rc = gBS->InstallMultipleProtocolInterfaces(&ControllerHandle, + &gEfiVgaMiniPortProtocolGuid, &pThisDev->VgaMiniPort, + NULL, NULL); + if (!EFI_ERROR(rc)) + { + DEBUG((DEBUG_INFO, "%a: Successfully started, pThisDev=%p ControllerHandle=%p\n", + __FUNCTION__, pThisDev, ControllerHandle)); + return EFI_SUCCESS; + } + + DEBUG((DEBUG_INFO, "%a: InstallMultipleProtocolInterfaces -> %r\n", __FUNCTION__, rc)); + gBS->FreePool(pThisDev); + } + else + DEBUG((DEBUG_INFO, "%a: AllocatePool -> %r\n", __FUNCTION__, rc)); + + gBS->CloseProtocol(ControllerHandle, &gEfiPciIoProtocolGuid, This->DriverBindingHandle, ControllerHandle); + } + else + DEBUG((DEBUG_INFO, "%a: PciIoProtocol -> %r\n", __FUNCTION__, rc)); + return rc; +} + +/** + * @copydoc EFI_DRIVER_BINDING_STOP + */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortDB_Stop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL) +{ + EFI_STATUS rc; + PVBOXVGAMINIPORT pThisDev; + + DEBUG((DEBUG_INFO, "%a: ControllerHandle=%p NumberOfChildren=%u\n", __FUNCTION__, ControllerHandle, NumberOfChildren)); + + /* + * Get the miniport driver instance associated with the controller. + */ + rc = gBS->OpenProtocol(ControllerHandle, &gEfiVgaMiniPortProtocolGuid, + (VOID **)&pThisDev, This->DriverBindingHandle, + ControllerHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL); + if (!EFI_ERROR(rc)) + { + ASSERT(pThisDev->u32Magic == VBOX_VGA_MINI_PORT_MAGIC); + ASSERT(pThisDev->hController == ControllerHandle); + if ( pThisDev->u32Magic == VBOX_VGA_MINI_PORT_MAGIC + && pThisDev->hController == ControllerHandle) + { + /* + * Uninstall the VgaMiniPort interface. + */ + rc = gBS->UninstallProtocolInterface(ControllerHandle, + &gEfiVgaMiniPortProtocolGuid, + &pThisDev->VgaMiniPort); + if (!EFI_ERROR(rc)) + { + /* + * Invalidate and release sources associated with the device instance. + */ + pThisDev->u32Magic = VBOX_VGA_MINI_PORT_MAGIC_DEAD; + gBS->FreePool(pThisDev); + + } + else + DEBUG((DEBUG_INFO, "%a: UninstallProtocolInterface -> %r\n", __FUNCTION__, rc)); + } + else + { + DEBUG((DEBUG_INFO, "%a: magic=%x/%x hController=%x/%x\n", __FUNCTION__, + pThisDev->u32Magic, VBOX_VGA_MINI_PORT_MAGIC, + pThisDev->hController, ControllerHandle)); + rc = EFI_DEVICE_ERROR; + } + gBS->CloseProtocol(ControllerHandle, &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, ControllerHandle); + } + else + DEBUG((DEBUG_INFO, "%a: VgaMiniPortProtocol -> %r\n", __FUNCTION__, rc)); + return rc; +} + + + + + +/** + * @copydoc EFI_VGA_MINI_PORT_SET_MODE + */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortVMP_SetMode(IN EFI_VGA_MINI_PORT_PROTOCOL *This, IN UINTN ModeNumber) +{ + PVBOXVGAMINIPORT pThisDev = (PVBOXVGAMINIPORT)This; + UINT8 r[64]; + int i; + + /* + * Check input. + */ + if (pThisDev->u32Magic != VBOX_VGA_MINI_PORT_MAGIC) + { + DEBUG((DEBUG_INFO, "%a: u32Magic=%x/%x\n", __FUNCTION__, pThisDev->u32Magic, VBOX_VGA_MINI_PORT_MAGIC)); + return EFI_DEVICE_ERROR; + } + if (ModeNumber >= This->MaxMode) + { + DEBUG((DEBUG_INFO, "%a: ModeNumber=%d >= MaxMode=%d\n", __FUNCTION__, ModeNumber, This->MaxMode)); + return EFI_UNSUPPORTED; + } + DEBUG((DEBUG_INFO, "%a: ModeNumber=%d\n", __FUNCTION__, ModeNumber)); + + /* some initialization */ + ASMOutU8(0x3c2, 0xc3); + ASMOutU8(0x3c4, 0x04); + ASMOutU8(0x3c5, 0x02); + + /* + * inb(r63, 0x3da); // reset attr F/F + * outb(0x3c0, 0); // disable palette + * outb(0x3d4, 0x11); outb(0x3d5, 0); // unprotect crtc regs 0 - 7 + */ + r[63] = ASMInU8((UINTN)0x3da); + ASMOutU8(0x3c0, 0); + ASMOutU16(0x3d4, 0x0011); + +#define BOUTB(count, aport, dport) \ + do { \ + for (i = 0 ; i < count; ++i) \ + { \ + ASMOutU8((aport), (UINT8)i);\ + ASMOutU8((dport), r[i]); \ + } \ + } while (0) + + /* + * Reset and set sequencer registers + * + * r0 = 0x01; r1 = 0x00; r2 = 0x03; r3 = 0x00; r4 = 0x02; + * boutb(5, 0x3c4, 0x3c5); + */ + r[0] = 0x01; + r[1] = 0x00; + r[2] = 0x03; + r[3] = 0x00; + r[4] = 0x02; + BOUTB(5, 0x3c4, 0x3c5); + + /* + * set misc out register + * + * outb(0x3c2, 0x67); + * + * r0 = 3 + * boutb(1, 0x3c4, 0x3c5); // enable sequencer + */ + r[0] = 3; + BOUTB(1, 0x3c4, 0x3c5); + + /* set all crtc registers */ + r[0] = 0x5f; r[1] = 0x4f; r[2] = 0x50; r[3] = 0x82; + r[4] = 0x55; r[5] = 0x81; r[6] = 0xbf; r[7] = 0x1f; + r[8] = 0x00; r[9] = 0x4f; r[10]= 0x0d; r[11]= 0x0e; + r[12]= 0x00; r[13]= 0x00; r[14]= 0x03; r[15]= 0xc0; + r[16]= 0x9c; r[17]= 0x0e; r[18]= 0x8f; r[19]= 0x28; + r[20]= 0x1f; r[21]= 0x96; r[22]= 0xb9; r[23]= 0xa3; + r[24]= 0xff; + BOUTB(25, 0x3d4, 0x3d5); + + /* set all graphics controller registers */ + r[0]= 0x00; r[1]= 0x00; r[2]= 0x00; r[3]= 0x00; + r[4]= 0x00; r[5]= 0x10; r[6]= 0x0e; r[7]= 0x00; + r[8]= 0xff; + BOUTB(9, 0x3ce, 0x3cf); + + /* set all attribute registers */ + r[63] = ASMInU8(0x3da); // reset flip/flop + r[0] = 0x00; r[1] = 0x01; r[2] = 0x02; r[3] = 0x03; + r[4] = 0x04; r[5] = 0x05; r[6] = 0x14; r[7] = 0x07; + r[8] = 0x38; r[9] = 0x39; r[10]= 0x3a; r[11]= 0x3b; + r[12]= 0x3c; r[13]= 0x3d; r[14]= 0x3e; r[15]= 0x3f; + r[16]= 0x0c; r[17]= 0x00; r[18]= 0x0f; r[19]= 0x08; + r[20]= 0x00; + BOUTB(21, 0x3c0, 0x3c0); + ASMOutU8(0x3c0, 0x20); // re-enable palette + + /* set all VBox extended registers */ + r[0] = 1; + BOUTB(1, 0x3c4, 0x3c5); // disable sequencer + + ASMOutU16(0x1ce, 0x04); ASMOutU16(0x1cf, 0); // ENABLE + + r[0] = 3; + BOUTB(1, 0x3c4, 0x3c5); // enable sequencer + + /* Load default values into the first 16 entries of the DAC */ + { + static const UINT8 s_a3bVgaDac[64*3] = + { + 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2A, + 0x00, 0x2A, 0x00, + 0x00, 0x2A, 0x2A, + 0x2A, 0x00, 0x00, + 0x2A, 0x00, 0x2A, + 0x2A, 0x2A, 0x00, + 0x2A, 0x2A, 0x2A, + 0x00, 0x00, 0x15, + 0x00, 0x00, 0x3F, + 0x00, 0x2A, 0x15, + 0x00, 0x2A, 0x3F, + 0x2A, 0x00, 0x15, + 0x2A, 0x00, 0x3F, + 0x2A, 0x2A, 0x15, + 0x2A, 0x2A, 0x3F, + 0x00, 0x15, 0x00, + 0x00, 0x15, 0x2A, + 0x00, 0x3F, 0x00, + 0x00, 0x3F, 0x2A, + 0x2A, 0x15, 0x00, + 0x2A, 0x15, 0x2A, + 0x2A, 0x3F, 0x00, + 0x2A, 0x3F, 0x2A, + 0x00, 0x15, 0x15, + 0x00, 0x15, 0x3F, + 0x00, 0x3F, 0x15, + 0x00, 0x3F, 0x3F, + 0x2A, 0x15, 0x15, + 0x2A, 0x15, 0x3F, + 0x2A, 0x3F, 0x15, + 0x2A, 0x3F, 0x3F, + 0x15, 0x00, 0x00, + 0x15, 0x00, 0x2A, + 0x15, 0x2A, 0x00, + 0x15, 0x2A, 0x2A, + 0x3F, 0x00, 0x00, + 0x3F, 0x00, 0x2A, + 0x3F, 0x2A, 0x00, + 0x3F, 0x2A, 0x2A, + 0x15, 0x00, 0x15, + 0x15, 0x00, 0x3F, + 0x15, 0x2A, 0x15, + 0x15, 0x2A, 0x3F, + 0x3F, 0x00, 0x15, + 0x3F, 0x00, 0x3F, + 0x3F, 0x2A, 0x15, + 0x3F, 0x2A, 0x3F, + 0x15, 0x15, 0x00, + 0x15, 0x15, 0x2A, + 0x15, 0x3F, 0x00, + 0x15, 0x3F, 0x2A, + 0x3F, 0x15, 0x00, + 0x3F, 0x15, 0x2A, + 0x3F, 0x3F, 0x00, + 0x3F, 0x3F, 0x2A, + 0x15, 0x15, 0x15, + 0x15, 0x15, 0x3F, + 0x15, 0x3F, 0x15, + 0x15, 0x3F, 0x3F, + 0x3F, 0x15, 0x15, + 0x3F, 0x15, 0x3F, + 0x3F, 0x3F, 0x15, + 0x3F, 0x3F, 0x3F + }; + + for (i = 0; i < 64; ++i) + { + ASMOutU8(0x3c8, (UINT8)i); + ASMOutU8(0x3c9, s_a3bVgaDac[i*3 + 0]); + ASMOutU8(0x3c9, s_a3bVgaDac[i*3 + 1]); + ASMOutU8(0x3c9, s_a3bVgaDac[i*3 + 2]); + } + } + + /* Load the appropriate font into the first map */ + { + UINT8 const *pabFont; + unsigned offBase = 0; + UINT16 height; + + switch (ModeNumber) { + case 0: // 80x25 mode, uses 8x16 font + pabFont = g_abVgaFont_8x16; + height = 16; + break; + case 1: // 80x50 mode, uses 8x8 font + pabFont = g_abVgaFont_8x8; + height = 8; + break; + default: + ASSERT(0); // Valid mode numbers checked above + return EFI_UNSUPPORTED; + } + // Enable font map access + { + /* Write sequencer registers */ + ASMOutU16(0x3c4, 0x0100); + ASMOutU16(0x3c4, 0x0402); + ASMOutU16(0x3c4, 0x0704); + ASMOutU16(0x3c4, 0x0300); + /* Write graphics controller registers */ + ASMOutU16(0x3ce, 0x0204); + ASMOutU16(0x3ce, 0x0005); + ASMOutU16(0x3ce, 0x0406); + } + + for (i = 0; i < 256; ++i) + { + int offChr = i * height; + int offDst = offBase + i * 32; + CopyMem((UINT8 *)0xA0000 + offDst, pabFont + offChr, height); + } + + // Set the CRTC Maximum Scan Line register + ASMOutU16(0x3d4, 0x4009 | ((height - 1) << 8)); + + // Disable font map access again + { + /* Write sequencer registers */ + ASMOutU16(0x3c4, 0x0100); + ASMOutU16(0x3c4, 0x0302); + ASMOutU16(0x3c4, 0x0304); + ASMOutU16(0x3c4, 0x0300); + /* Write graphics controller registers */ + ASMOutU16(0x3ce, 0x0004); + ASMOutU16(0x3ce, 0x1005); + ASMOutU16(0x3ce, 0x0e06); + } + } + + return EFI_SUCCESS; +} + + + + +/** @copydoc EFI_COMPONENT_NAME_GET_DRIVER_NAME */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN_GetDriverName(IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, OUT CHAR16 **DriverName) +{ + return LookupUnicodeString2(Language, + This->SupportedLanguages, + &g_aVBoxMiniPortDriverLangAndNames[0], + DriverName, + TRUE); +} + +/** @copydoc EFI_COMPONENT_NAME_GET_CONTROLLER_NAME */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN_GetControllerName(IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, OUT CHAR16 **ControllerName) +{ + /** @todo try query the protocol from the controller and forward the query. */ + return EFI_UNSUPPORTED; +} + + + + +/** @copydoc EFI_COMPONENT_NAME2_GET_DRIVER_NAME */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN2_GetDriverName(IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN CHAR8 *Language, OUT CHAR16 **DriverName) +{ + return LookupUnicodeString2(Language, + This->SupportedLanguages, + &g_aVBoxMiniPortDriverLangAndNames[0], + DriverName, + FALSE); +} + +/** @copydoc EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME */ +static EFI_STATUS EFIAPI +VBoxVgaMiniPortCN2_GetControllerName(IN EFI_COMPONENT_NAME2_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, OUT CHAR16 **ControllerName) +{ + /** @todo try query the protocol from the controller and forward the query. */ + return EFI_UNSUPPORTED; +} + diff --git a/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf new file mode 100644 index 000000000..1c449d0dc --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxVgaMiniPortDxe/VBoxVgaMiniPortDxe.inf @@ -0,0 +1,56 @@ +# $Id: VBoxVgaMiniPortDxe.inf $ +## @file +# VBoxVgaMiniPortDxe.inf - VgaMiniPort Protocol module declaration. +# + + +# +# Copyright (C) 2009-2010 Sun Microsystems, Inc. +# +# 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. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +# Clara, CA 95054 USA or visit http://www.sun.com if you need +# additional information or have any questions. +# +#/ + + + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = VBoxVgaMiniPortDxe + FILE_GUID = AE8558FD-9DA9-4FA1-AE16-94456C977244 + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + ENTRY_POINT = DxeInitializeVBoxVgaMiniPort + +[Sources.common] + VBoxVgaMiniPortDxe.c + VBoxVgaFonts.h + VBoxVgaFont-8x14.h + +[Packages] + MdePkg/MdePkg.dec + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec + VBoxPkg/VBoxPkg.dec + +[LibraryClasses] + UefiLib + DebugLib + UefiBootServicesTableLib + UefiDriverEntryPoint + BaseMemoryLib + MemoryAllocationLib + +[Protocols] + gEfiPciIoProtocolGuid ## TO_START + gEfiVgaMiniPortProtocolGuid ## BY_START diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd index d979865dd..3c57b41e5 100644 Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd differ diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd index 4abd8c375..d9c70a5f8 100644 Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd differ diff --git a/src/VBox/Devices/Graphics/BIOS/vbe.c b/src/VBox/Devices/Graphics/BIOS/vbe.c index 4b2aa9f1b..ee7ebdcd0 100644 --- a/src/VBox/Devices/Graphics/BIOS/vbe.c +++ b/src/VBox/Devices/Graphics/BIOS/vbe.c @@ -95,11 +95,13 @@ _no_vbebios_info_string: .byte 0x0a,0x0d .byte 0x00 +#ifdef DEBUG msg_vbe_init: .ascii "VirtualBox Version " .ascii VBOX_VERSION_STRING .ascii " VBE Display Adapter" .byte 0x0a,0x0d, 0x00 +#endif .align 2 diff --git a/src/VBox/Devices/Graphics/BIOS/vgabios.c b/src/VBox/Devices/Graphics/BIOS/vgabios.c index 6cf9e088c..3a8bfedfd 100644 --- a/src/VBox/Devices/Graphics/BIOS/vgabios.c +++ b/src/VBox/Devices/Graphics/BIOS/vgabios.c @@ -2055,7 +2055,9 @@ Bit8u car;Bit8u page;Bit8u attr;Bit8u flag; { if(vga_modes[line].class==TEXT) { - biosfn_scroll(0x01,0x07,0,0,nbrows-1,nbcols-1,page,SCROLL_UP); + address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+(ycurs-1)*nbcols)*2; + attr=read_byte(vga_modes[line].sstart,address+1); + biosfn_scroll(0x01,attr,0,0,nbrows-1,nbcols-1,page,SCROLL_UP); } else { diff --git a/src/VBox/Devices/Network/DevVirtioNet.cpp b/src/VBox/Devices/Network/DevVirtioNet.cpp index 8940de80d..4505560cf 100644 --- a/src/VBox/Devices/Network/DevVirtioNet.cpp +++ b/src/VBox/Devices/Network/DevVirtioNet.cpp @@ -302,7 +302,7 @@ PDMBOTHCBDECL(int) vnetGetConfig(void *pvState, uint32_t port, uint32_t cb, void if (port + cb > sizeof(struct VNetPCIConfig)) { Log(("%s vnetGetConfig: Read beyond the config structure is attempted (port=%RTiop cb=%x).\n", INSTANCE(pState), port, cb)); - return VERR_INTERNAL_ERROR; + return VERR_IOM_IOPORT_UNUSED; } memcpy(data, ((uint8_t*)&pState->config) + port, cb); return VINF_SUCCESS; @@ -314,7 +314,10 @@ PDMBOTHCBDECL(int) vnetSetConfig(void *pvState, uint32_t port, uint32_t cb, void if (port + cb > sizeof(struct VNetPCIConfig)) { Log(("%s vnetGetConfig: Write beyond the config structure is attempted (port=%RTiop cb=%x).\n", INSTANCE(pState), port, cb)); - return VERR_INTERNAL_ERROR; + if (port < sizeof(struct VNetPCIConfig)) + memcpy(((uint8_t*)&pState->config) + port, data, + sizeof(struct VNetPCIConfig) - port); + return VINF_SUCCESS; } memcpy(((uint8_t*)&pState->config) + port, data, cb); return VINF_SUCCESS; diff --git a/src/VBox/Devices/Network/DrvNAT.cpp b/src/VBox/Devices/Network/DrvNAT.cpp index 43633a1e5..7acf2c837 100644 --- a/src/VBox/Devices/Network/DrvNAT.cpp +++ b/src/VBox/Devices/Network/DrvNAT.cpp @@ -329,6 +329,7 @@ static DECLCALLBACK(void) drvNATRecvWorker(PDRVNAT pThis, uint8_t *pu8Buf, int c } rc = RTCritSectEnter(&pThis->csDevAccess); + AssertRC(rc); rc = pThis->pPort->pfnWaitReceiveAvail(pThis->pPort, RT_INDEFINITE_WAIT); if (RT_SUCCESS(rc)) diff --git a/src/VBox/Devices/Network/slirp/bootp.c b/src/VBox/Devices/Network/slirp/bootp.c index e5eb4dae6..f1c7d90b8 100644 --- a/src/VBox/Devices/Network/slirp/bootp.c +++ b/src/VBox/Devices/Network/slirp/bootp.c @@ -188,7 +188,7 @@ static struct mbuf *dhcp_create_msg(PNATState pData, struct bootp_t *bp, struct memset(rbp, 0, sizeof(struct bootp_t)); rbp->bp_op = BOOTP_REPLY; rbp->bp_xid = bp->bp_xid; /* see table 3 of rfc2131*/ - rbp->bp_flags = bp->bp_flags; + rbp->bp_flags = bp->bp_flags; /* figure 2 of rfc2131 */ rbp->bp_giaddr.s_addr = bp->bp_giaddr.s_addr; #if 0 /*check flags*/ saddr.sin_port = htons(BOOTP_SERVER); @@ -420,8 +420,8 @@ static int dhcp_decode_request(PNATState pData, struct bootp_t *bp, const uint8_ } else { - /*see table 4 rfc2131*/ - if (bp->bp_flags & DHCP_FLAGS_B) + /* table 4 of rfc2131 */ + if (bp->bp_flags & RT_H2N_U16_C(DHCP_FLAGS_B)) dhcp_stat = REBINDING; else dhcp_stat = RENEWING; @@ -728,7 +728,8 @@ static void bootp_reply(PNATState pData, struct mbuf *m, int offReply, uint16_t - sizeof(struct udphdr); m->m_data += sizeof(struct udphdr) + sizeof(struct ip); - if ((flags & DHCP_FLAGS_B) || nack != 0) + if ( (flags & RT_H2N_U16_C(DHCP_FLAGS_B)) + || nack != 0) daddr.sin_addr.s_addr = INADDR_BROADCAST; else daddr.sin_addr.s_addr = rbp->bp_yiaddr.s_addr; /*unicast requested by client*/ diff --git a/src/VBox/Devices/Network/slirp/bootp.h b/src/VBox/Devices/Network/slirp/bootp.h index 31c9e0044..da091e0e8 100644 --- a/src/VBox/Devices/Network/slirp/bootp.h +++ b/src/VBox/Devices/Network/slirp/bootp.h @@ -94,29 +94,30 @@ #define BOOTP_VENDOR_LEN 64 #define DHCP_OPT_LEN 312 +/* RFC 2131 */ struct bootp_t { - struct ip ip; - struct udphdr udp; - uint8_t bp_op; - uint8_t bp_htype; - uint8_t bp_hlen; - uint8_t bp_hops; - uint32_t bp_xid; - uint16_t bp_secs; - uint16_t bp_flags; - struct in_addr bp_ciaddr; - struct in_addr bp_yiaddr; - struct in_addr bp_siaddr; - struct in_addr bp_giaddr; - uint8_t bp_hwaddr[16]; - uint8_t bp_sname[64]; - uint8_t bp_file[128]; - uint8_t bp_vend[DHCP_OPT_LEN]; + struct ip ip; /**< header: IP header */ + struct udphdr udp; /**< header: UDP header */ + uint8_t bp_op; /**< opcode (BOOTP_REQUEST, BOOTP_REPLY) */ + uint8_t bp_htype; /**< hardware type */ + uint8_t bp_hlen; /**< hardware address length */ + uint8_t bp_hops; /**< hop count */ + uint32_t bp_xid; /**< transaction ID */ + uint16_t bp_secs; /**< numnber of seconds */ + uint16_t bp_flags; /**< flags (DHCP_FLAGS_B) */ + struct in_addr bp_ciaddr; /**< client IP address */ + struct in_addr bp_yiaddr; /**< your IP address */ + struct in_addr bp_siaddr; /**< server IP address */ + struct in_addr bp_giaddr; /**< gateway IP address */ + uint8_t bp_hwaddr[16]; /** client hardware address */ + uint8_t bp_sname[64]; /** server host name */ + uint8_t bp_file[128]; /** boot filename */ + uint8_t bp_vend[DHCP_OPT_LEN]; /**< vendor specific info */ }; -#define DHCP_FLAGS_B (1<<15) +#define DHCP_FLAGS_B (1<<15) /**< B, broadcast */ struct bootp_ext { uint8_t bpe_tag; diff --git a/src/VBox/Devices/Network/slirp/ip_icmp.c b/src/VBox/Devices/Network/slirp/ip_icmp.c index 1e4add7da..d7fbfb328 100644 --- a/src/VBox/Devices/Network/slirp/ip_icmp.c +++ b/src/VBox/Devices/Network/slirp/ip_icmp.c @@ -181,7 +181,11 @@ icmp_find_original_mbuf(PNATState pData, struct ip *ip) { m0 = icm->im_m; ip0 = mtod(m0, struct ip *); - AssertRelease(ip0->ip_p == IPPROTO_ICMP); + if (ip0->ip_p != IPPROTO_ICMP) + { + /* try next item */ + continue; + } icp0 = (struct icmp *)((char *)ip0 + (ip0->ip_hl << 2)); if ( ( (icp->icmp_type != ICMP_ECHO && ip->ip_src.s_addr == ip0->ip_dst.s_addr) || (icp->icmp_type == ICMP_ECHO && ip->ip_dst.s_addr == ip0->ip_dst.s_addr)) diff --git a/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c b/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c index afa6dc466..be1320572 100644 --- a/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c +++ b/src/VBox/Devices/Network/slirp/libalias/alias_nbt.c @@ -70,6 +70,7 @@ __FBSDID("$FreeBSD: src/sys/netinet/libalias/alias_nbt.c,v 1.20.8.1 2009/04/15 0 # include # include "alias_local.h" # include "alias_mod.h" +# define isprint RT_C_IS_PRINT #endif /*VBOX*/ #define NETBIOS_NS_PORT_NUMBER 137 diff --git a/src/VBox/Devices/Network/slirp/mbuf.c b/src/VBox/Devices/Network/slirp/mbuf.c index 93d5914fb..0863f3b72 100644 --- a/src/VBox/Devices/Network/slirp/mbuf.c +++ b/src/VBox/Devices/Network/slirp/mbuf.c @@ -88,7 +88,7 @@ m_init(PNATState pData) msize_init(pData); #if 1 rc = RTCritSectInit(&pData->cs_mbuf_zone); - AssertReleaseRC(rc); + AssertRC(rc); rc = mbuf_zone_init(pData); Assert((rc == 0)); #endif @@ -129,7 +129,7 @@ m_get(PNATState pData) DEBUG_CALL("m_get"); rc = RTCritSectEnter(&pData->cs_mbuf_zone); - AssertReleaseRC(rc); + AssertRC(rc); recheck_zone: if (m_freelist.m_next == &m_freelist) @@ -181,7 +181,7 @@ recheck_zone: end_error: DEBUG_ARG("m = %lx", (long )m); rc = RTCritSectLeave(&pData->cs_mbuf_zone); - AssertReleaseRC(rc); + AssertRC(rc); return m; } @@ -193,7 +193,7 @@ m_free(PNATState pData, struct mbuf *m) DEBUG_ARG("m = %lx", (long )m); rc = RTCritSectEnter(&pData->cs_mbuf_zone); - AssertReleaseRC(rc); + AssertRC(rc); mbuf_alloced--; if(m) { @@ -228,7 +228,7 @@ m_free(PNATState pData, struct mbuf *m) STAM_COUNTER_INC(&pData->StatMBufAllocation); } /* if(m) */ rc = RTCritSectLeave(&pData->cs_mbuf_zone); - AssertReleaseRC(rc); + AssertRC(rc); } /* update macros for m_get/m_free*/ diff --git a/src/VBox/Devices/Network/slirp/slirp_state.h b/src/VBox/Devices/Network/slirp/slirp_state.h index f462946b8..86cf04777 100644 --- a/src/VBox/Devices/Network/slirp/slirp_state.h +++ b/src/VBox/Devices/Network/slirp/slirp_state.h @@ -444,24 +444,24 @@ typedef struct NATState int rc; \ /* Assert(strcmp(RTThreadSelfName(), "EMT") != 0); */ \ rc = RTCritSectEnter(&VBOX_X(queue) ## _mutex); \ - AssertReleaseRC(rc); \ + AssertRC(rc); \ } while (0) # define QSOCKET_UNLOCK(queue) \ do { \ int rc; \ rc = RTCritSectLeave(&VBOX_X(queue) ## _mutex); \ - AssertReleaseRC(rc); \ + AssertRC(rc); \ } while (0) # define QSOCKET_LOCK_CREATE(queue) \ do { \ int rc; \ rc = RTCritSectInit(&pData->queue ## _mutex); \ - AssertReleaseRC(rc); \ + AssertRC(rc); \ } while (0) # define QSOCKET_LOCK_DESTROY(queue) \ do { \ int rc = RTCritSectDelete(&pData->queue ## _mutex); \ - AssertReleaseRC(rc); \ + AssertRC(rc); \ } while (0) # define QSOCKET_FOREACH(so, sonext, label) \ @@ -506,7 +506,7 @@ typedef struct NATState PRTREQ pReq = NULL; \ int rc; \ rc = RTReqAlloc((data)->pReqQueue, &pReq, RTREQTYPE_INTERNAL); \ - AssertReleaseRC(rc); \ + AssertRC(rc); \ pReq->u.Internal.pfn = (PFNRT)tcp_output; \ pReq->u.Internal.cArgs = 2; \ pReq->u.Internal.aArgs[0] = (uintptr_t)(data); \ diff --git a/src/VBox/Devices/Network/slirp/socket.h b/src/VBox/Devices/Network/slirp/socket.h index ba71b63f2..4706a5390 100644 --- a/src/VBox/Devices/Network/slirp/socket.h +++ b/src/VBox/Devices/Network/slirp/socket.h @@ -95,28 +95,28 @@ struct socket do { \ int rc; \ /* Assert(strcmp(RTThreadSelfName(), "EMT") != 0); */ \ - Log2(("lock:%s:%d L on %R[natsock]\n", __FUNCTION__, __LINE__, (so))); \ - Assert(!RTCritSectIsOwner(&(so)->so_mutex)); \ - rc = RTCritSectEnter(&(so)->so_mutex); \ - AssertReleaseRC(rc); \ + Log2(("lock:%s:%d L on %R[natsock]\n", __FUNCTION__, __LINE__, (so))); \ + Assert(!RTCritSectIsOwner(&(so)->so_mutex)); \ + rc = RTCritSectEnter(&(so)->so_mutex); \ + AssertRC(rc); \ } while (0) # define SOCKET_UNLOCK(so) \ do { \ int rc; \ - if ((so) != NULL) Log2(("lock:%s:%d U on %R[natsock]\n", __FUNCTION__, __LINE__, (so))); \ - rc = RTCritSectLeave(&(so)->so_mutex); \ - AssertReleaseRC(rc); \ + if ((so) != NULL) Log2(("lock:%s:%d U on %R[natsock]\n", __FUNCTION__, __LINE__, (so))); \ + rc = RTCritSectLeave(&(so)->so_mutex); \ + Assert(rc); \ } while (0) # define SOCKET_LOCK_CREATE(so) \ do { \ int rc; \ - rc = RTCritSectInit(&(so)->so_mutex); \ - AssertReleaseRC(rc); \ + rc = RTCritSectInit(&(so)->so_mutex); \ + AssertRC(rc); \ } while (0) # define SOCKET_LOCK_DESTROY(so) \ do { \ - int rc = RTCritSectDelete(&(so)->so_mutex); \ - AssertReleaseRC(rc); \ + int rc = RTCritSectDelete(&(so)->so_mutex); \ + AssertRC(rc); \ } while (0) #else # define SOCKET_LOCK(so) do {} while (0) diff --git a/src/VBox/Devices/Network/slirp/tcp_subr.c b/src/VBox/Devices/Network/slirp/tcp_subr.c index 60caa34db..e5050b7d5 100644 --- a/src/VBox/Devices/Network/slirp/tcp_subr.c +++ b/src/VBox/Devices/Network/slirp/tcp_subr.c @@ -362,7 +362,18 @@ tcp_sockclosed(PNATState pData, struct tcpcb *tp) if ( tp && tp->t_state >= TCPS_FIN_WAIT_2) soisfdisconnected(tp->t_socket); - if (tp) + /* + * (vasily) there're situations when the FIN or FIN,ACK are lost (Windows host) + * and retransmitting keeps VBox busy on sending closing sequences *very* frequent, + * easting a lot of CPU. To avoid this we don't sent on sockets marked as closed + * (see slirp.c for details about setting so_close member). + */ + if ( tp +#ifdef RT_OS_WINDOWS + && tp->t_socket + && !tp->t_socket->so_close +#endif + ) tcp_output(pData, tp); } diff --git a/src/VBox/Devices/Storage/ATAController.cpp b/src/VBox/Devices/Storage/ATAController.cpp index ce905994e..07647462c 100644 --- a/src/VBox/Devices/Storage/ATAController.cpp +++ b/src/VBox/Devices/Storage/ATAController.cpp @@ -4692,6 +4692,12 @@ int ataControllerIOPortReadStr1(PAHCIATACONTROLLER pCtl, RTIOPORT Port, RTGCPTR cTransAvailable = (s->iIOBufferPIODataEnd - s->iIOBufferPIODataStart) / cb; #ifndef IN_RING3 + /* Deal with the unlikely case where no data (or not enough for the read length operation) is available; go back to ring 3. */ + if (!cTransAvailable) + { + PDMCritSectLeave(&pCtl->lock); + return VINF_IOM_HC_IOPORT_READ; + } /* The last transfer unit cannot be handled in GC, as it involves thread communication. */ cTransAvailable--; #endif /* !IN_RING3 */ @@ -4738,6 +4744,12 @@ int ataControllerIOPortWriteStr1(PAHCIATACONTROLLER pCtl, RTIOPORT Port, RTGCPTR cTransAvailable = (s->iIOBufferPIODataEnd - s->iIOBufferPIODataStart) / cb; #ifndef IN_RING3 + /* Deal with the unlikely case where no data (or not enough for the read length operation) is available; go back to ring 3. */ + if (!cTransAvailable) + { + PDMCritSectLeave(&pCtl->lock); + return VINF_IOM_HC_IOPORT_WRITE; + } /* The last transfer unit cannot be handled in GC, as it involves thread communication. */ cTransAvailable--; #endif /* !IN_RING3 */ diff --git a/src/VBox/Devices/Storage/DevATA.cpp b/src/VBox/Devices/Storage/DevATA.cpp index 24d29e910..d9b23fc46 100644 --- a/src/VBox/Devices/Storage/DevATA.cpp +++ b/src/VBox/Devices/Storage/DevATA.cpp @@ -5387,6 +5387,12 @@ PDMBOTHCBDECL(int) ataIOPortReadStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT cTransAvailable = (s->iIOBufferPIODataEnd - s->iIOBufferPIODataStart) / cb; #ifndef IN_RING3 + /* Deal with the unlikely case where no data (or not enough for the read length operation) is available; go back to ring 3. */ + if (!cTransAvailable) + { + PDMCritSectLeave(&pCtl->lock); + return VINF_IOM_HC_IOPORT_READ; + } /* The last transfer unit cannot be handled in GC, as it involves thread communication. */ cTransAvailable--; #endif /* !IN_RING3 */ @@ -5439,6 +5445,12 @@ PDMBOTHCBDECL(int) ataIOPortWriteStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT cTransAvailable = (s->iIOBufferPIODataEnd - s->iIOBufferPIODataStart) / cb; #ifndef IN_RING3 + /* Deal with the unlikely case where no data (or not enough for the read length operation) is available; go back to ring 3. */ + if (!cTransAvailable) + { + PDMCritSectLeave(&pCtl->lock); + return VINF_IOM_HC_IOPORT_WRITE; + } /* The last transfer unit cannot be handled in GC, as it involves thread communication. */ cTransAvailable--; #endif /* !IN_RING3 */ diff --git a/src/VBox/Devices/Storage/DevBusLogic.cpp b/src/VBox/Devices/Storage/DevBusLogic.cpp index db1336163..6a6378a90 100644 --- a/src/VBox/Devices/Storage/DevBusLogic.cpp +++ b/src/VBox/Devices/Storage/DevBusLogic.cpp @@ -727,18 +727,10 @@ typedef struct BUSLOGICTASKSTATE Mailbox MailboxGuest; /** The SCSI request we pass to the underlying SCSI engine. */ PDMSCSIREQUEST PDMScsiRequest; - /** Number of bytes in all scatter gather entries. */ - uint32_t cbScatterGather; - /** Number of entries in the scatter gather list. */ - uint32_t cScatterGather; - /** Page map lock array. */ - PPGMPAGEMAPLOCK paPageLock; - /** Pointer to the scatter gather array. */ - PPDMDATASEG paScatterGather; - /** Pointer to the page map lock for the sense buffer. */ - PGMPAGEMAPLOCK pPageLockSense; + /** Data buffer segment */ + PDMDATASEG DataSeg; /** Pointer to the R3 sense buffer. */ - uint8_t *pu8SenseBuffer; + uint8_t *pbSenseBuffer; /** Flag whether this is a request from the BIOS. */ bool fBIOS; } BUSLOGICTASKSTATE, *PBUSLOGICTASKSTATE; @@ -989,281 +981,214 @@ static void buslogicDumpCCBInfo(PCommandControlBlock pCCB) #endif /** - * Maps the data buffer into R3. + * Allocate data buffer. * * @returns VBox status code. * @param pTaskState Pointer to the task state. - * @param fReadonly Flag whether the mappings should be readonly. */ -static int buslogicMapGCDataBufIntoR3(PBUSLOGICTASKSTATE pTaskState, bool fReadonly) +static int buslogicDataBufferAlloc(PBUSLOGICTASKSTATE pTaskState) { - int rc = VINF_SUCCESS; - uint32_t cScatterGatherEntriesR3 = 0; PPDMDEVINS pDevIns = pTaskState->CTX_SUFF(pTargetDevice)->CTX_SUFF(pBusLogic)->CTX_SUFF(pDevIns); - /* - * @todo: Check following assumption and what residual means. - * - * The BusLogic adapter can handle two different data buffer formats. - * The first one is that the data pointer entry in the CCB points to - * the buffer directly. In second mode the data pointer points to a - * scatter gather list which describes the buffer. - */ - if ( (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB_SCATTER_GATHER) - || (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB_RESIDUAL_SCATTER_GATHER)) + if ( (pTaskState->CommandControlBlockGuest.uDataDirection != BUSLOGIC_CCB_DIRECTION_NO_DATA) + && (pTaskState->CommandControlBlockGuest.cbData > 0)) { - uint32_t cScatterGatherGCRead; - uint32_t iScatterGatherEntry; - ScatterGatherEntry aScatterGatherReadGC[32]; /* Number of scatter gather list entries read from guest memory. */ - uint32_t cScatterGatherGCLeft = pTaskState->CommandControlBlockGuest.cbData / sizeof(ScatterGatherEntry); - RTGCPHYS GCPhysAddrScatterGatherCurrent = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; - - /* First pass - count needed R3 scatter gather list entries. */ - do + /* + * @todo: Check following assumption and what residual means. + * + * The BusLogic adapter can handle two different data buffer formats. + * The first one is that the data pointer entry in the CCB points to + * the buffer directly. In second mode the data pointer points to a + * scatter gather list which describes the buffer. + */ + if ( (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB_SCATTER_GATHER) + || (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB_RESIDUAL_SCATTER_GATHER)) { - cScatterGatherGCRead = (cScatterGatherGCLeft < RT_ELEMENTS(aScatterGatherReadGC)) - ? cScatterGatherGCLeft - : RT_ELEMENTS(aScatterGatherReadGC); - cScatterGatherGCLeft -= cScatterGatherGCRead; - - /* Read the SG entries. */ - PDMDevHlpPhysRead(pDevIns, GCPhysAddrScatterGatherCurrent, &aScatterGatherReadGC[0], - cScatterGatherGCRead * sizeof(ScatterGatherEntry)); - - for (iScatterGatherEntry = 0; iScatterGatherEntry < cScatterGatherGCRead; iScatterGatherEntry++) + uint32_t cScatterGatherGCRead; + uint32_t iScatterGatherEntry; + ScatterGatherEntry aScatterGatherReadGC[32]; /* Number of scatter gather list entries read from guest memory. */ + uint32_t cScatterGatherGCLeft = pTaskState->CommandControlBlockGuest.cbData / sizeof(ScatterGatherEntry); + RTGCPHYS GCPhysAddrScatterGatherCurrent = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; + size_t cbDataToTransfer = 0; + + /* Count number of bytes to transfer. */ + do { - RTGCPHYS GCPhysAddrDataBase; - size_t cbDataToTransfer; - - Log(("%s: iScatterGatherEntry=%u\n", __FUNCTION__, iScatterGatherEntry)); + cScatterGatherGCRead = (cScatterGatherGCLeft < RT_ELEMENTS(aScatterGatherReadGC)) + ? cScatterGatherGCLeft + : RT_ELEMENTS(aScatterGatherReadGC); + cScatterGatherGCLeft -= cScatterGatherGCRead; - GCPhysAddrDataBase = (RTGCPHYS)aScatterGatherReadGC[iScatterGatherEntry].u32PhysAddrSegmentBase; - cbDataToTransfer = aScatterGatherReadGC[iScatterGatherEntry].cbSegment; + /* Read the SG entries. */ + PDMDevHlpPhysRead(pDevIns, GCPhysAddrScatterGatherCurrent, &aScatterGatherReadGC[0], + cScatterGatherGCRead * sizeof(ScatterGatherEntry)); - Log(("%s: GCPhysAddrDataBase=%RGp cbDataToTransfer=%u\n", __FUNCTION__, GCPhysAddrDataBase, cbDataToTransfer)); - - /* - * Check if the physical address is page aligned. - */ - if (GCPhysAddrDataBase & PAGE_OFFSET_MASK) + for (iScatterGatherEntry = 0; iScatterGatherEntry < cScatterGatherGCRead; iScatterGatherEntry++) { - RTGCPHYS GCPhysAddrDataNextPage = PAGE_ADDRESS(GCPhysAddrDataBase) + PAGE_SIZE; - uint32_t u32GCPhysAddrDiff = GCPhysAddrDataNextPage - GCPhysAddrDataBase; - - Log(("%s: Align page: GCPhysAddrDataBase=%RGp GCPhysAddrDataNextPage=%RGp\n", - __FUNCTION__, GCPhysAddrDataBase, GCPhysAddrDataNextPage)); - - cScatterGatherEntriesR3++; - /* Subtract size of the buffer in the actual page. */ - if (cbDataToTransfer < u32GCPhysAddrDiff) - cbDataToTransfer = 0; - else - cbDataToTransfer -= u32GCPhysAddrDiff; - } + RTGCPHYS GCPhysAddrDataBase; - /* The address is now page aligned. */ - while (cbDataToTransfer) - { - Log(("%s: GCPhysAddrDataBase=%RGp cbDataToTransfer=%u cScatterGatherEntriesR3=%u\n", - __FUNCTION__, GCPhysAddrDataBase, cbDataToTransfer, cScatterGatherEntriesR3)); + Log(("%s: iScatterGatherEntry=%u\n", __FUNCTION__, iScatterGatherEntry)); - cScatterGatherEntriesR3++; + GCPhysAddrDataBase = (RTGCPHYS)aScatterGatherReadGC[iScatterGatherEntry].u32PhysAddrSegmentBase; + cbDataToTransfer += aScatterGatherReadGC[iScatterGatherEntry].cbSegment; - /* Check if this is the last page the buffer is in. */ - if (cbDataToTransfer < PAGE_SIZE) - cbDataToTransfer = 0; - else - cbDataToTransfer -= PAGE_SIZE; + Log(("%s: GCPhysAddrDataBase=%RGp cbDataToTransfer=%u\n", + __FUNCTION__, GCPhysAddrDataBase, + aScatterGatherReadGC[iScatterGatherEntry].cbSegment)); } - } - /* Set address to the next entries to read. */ - GCPhysAddrScatterGatherCurrent += cScatterGatherGCRead * sizeof(ScatterGatherEntry); - } while (cScatterGatherGCLeft); + /* Set address to the next entries to read. */ + GCPhysAddrScatterGatherCurrent += cScatterGatherGCRead * sizeof(ScatterGatherEntry); + } while (cScatterGatherGCLeft > 0); - Log(("%s: cScatterGatherEntriesR3=%u\n", __FUNCTION__, cScatterGatherEntriesR3)); - - /* - * Allocate page map lock and scatter gather array. - * @todo: Optimize with caching. - */ - AssertMsg(!pTaskState->paPageLock && !pTaskState->paScatterGather, ("paPageLock or/and paScatterGather are not NULL\n")); - pTaskState->cScatterGather = cScatterGatherEntriesR3; - pTaskState->cbScatterGather = 0; - pTaskState->paPageLock = (PPGMPAGEMAPLOCK)RTMemAllocZ(cScatterGatherEntriesR3 * sizeof(PGMPAGEMAPLOCK)); - AssertMsgReturn(pTaskState->paPageLock, ("Allocating page lock array failed\n"), VERR_NO_MEMORY); - pTaskState->paScatterGather = (PPDMDATASEG)RTMemAllocZ(cScatterGatherEntriesR3 * sizeof(PDMDATASEG)); - AssertMsgReturn(pTaskState->paScatterGather, ("Allocating page lock array failed\n"), VERR_NO_MEMORY); - - /* Second pass - map the elements into R3. **/ - cScatterGatherGCLeft = pTaskState->CommandControlBlockGuest.cbData / sizeof(ScatterGatherEntry); - GCPhysAddrScatterGatherCurrent = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; - PPGMPAGEMAPLOCK pPageLockCurrent = pTaskState->paPageLock; - PPDMDATASEG pScatterGatherCurrent = pTaskState->paScatterGather; - - do - { - cScatterGatherGCRead = (cScatterGatherGCLeft < RT_ELEMENTS(aScatterGatherReadGC)) ? cScatterGatherGCLeft : RT_ELEMENTS(aScatterGatherReadGC); - cScatterGatherGCLeft -= cScatterGatherGCRead; + Log((": cbDataToTransfer=%d\n", cbDataToTransfer)); - /* Read the SG entries. */ - PDMDevHlpPhysRead(pDevIns, GCPhysAddrScatterGatherCurrent, &aScatterGatherReadGC[0], cScatterGatherGCRead * sizeof(ScatterGatherEntry)); + /* Allocate buffer */ + pTaskState->DataSeg.cbSeg = cbDataToTransfer; + pTaskState->DataSeg.pvSeg = RTMemAlloc(pTaskState->DataSeg.cbSeg); + if (!pTaskState->DataSeg.pvSeg) + return VERR_NO_MEMORY; - for (iScatterGatherEntry = 0; iScatterGatherEntry < cScatterGatherGCRead; iScatterGatherEntry++) + /* Copy the data if needed */ + if (pTaskState->CommandControlBlockGuest.uDataDirection == BUSLOGIC_CCB_DIRECTION_OUT) { - RTGCPHYS GCPhysAddrDataBase; - uint32_t cbDataToTransfer; - - GCPhysAddrDataBase = (RTGCPHYS)aScatterGatherReadGC[iScatterGatherEntry].u32PhysAddrSegmentBase; - cbDataToTransfer = aScatterGatherReadGC[iScatterGatherEntry].cbSegment; - pTaskState->cbScatterGather += cbDataToTransfer; + cScatterGatherGCLeft = pTaskState->CommandControlBlockGuest.cbData / sizeof(ScatterGatherEntry); + GCPhysAddrScatterGatherCurrent = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; + uint8_t *pbData = (uint8_t *)pTaskState->DataSeg.pvSeg; - /* - * Check if the physical address is page aligned. - */ - if (GCPhysAddrDataBase & PAGE_OFFSET_MASK) + do { - RTGCPHYS GCPhysAddrDataNextPage = PAGE_ADDRESS(GCPhysAddrDataBase) + PAGE_SIZE; - uint32_t u32GCPhysAddrDiff = GCPhysAddrDataNextPage - GCPhysAddrDataBase; /* Difference from the buffer start to the next page boundary. */ - - /* Check if the mapping ends at the page boundary and set segment size accordingly. */ - pScatterGatherCurrent->cbSeg = (cbDataToTransfer < u32GCPhysAddrDiff) ? cbDataToTransfer : u32GCPhysAddrDiff; - - /* Create the mapping. */ - if (fReadonly) - rc = PDMDevHlpPhysGCPhys2CCPtrReadOnly(pDevIns, PAGE_ADDRESS(GCPhysAddrDataBase), 0, (const void **)&pScatterGatherCurrent->pvSeg, pPageLockCurrent); /** @todo r=bird: PAGE_ADDRESS is the wrong macro here as well... */ - else - rc = PDMDevHlpPhysGCPhys2CCPtr(pDevIns, PAGE_ADDRESS(GCPhysAddrDataBase), 0, &pScatterGatherCurrent->pvSeg, pPageLockCurrent); - - if (RT_FAILURE(rc)) - AssertMsgFailed(("Creating mapping failed rc=%Rrc\n", rc)); - - /* Let pvBuf point to the start of the buffer in the page. */ - pScatterGatherCurrent->pvSeg = ((uint8_t *)pScatterGatherCurrent->pvSeg) + (GCPhysAddrDataBase - PAGE_ADDRESS(GCPhysAddrDataBase)); - - /* Subtract size of the buffer in the actual page. */ - cbDataToTransfer -= (uint32_t)pScatterGatherCurrent->cbSeg; - pPageLockCurrent++; - pScatterGatherCurrent++; - /* Let physical address point to the next page in the buffer. */ - GCPhysAddrDataBase = GCPhysAddrDataNextPage; - } + cScatterGatherGCRead = (cScatterGatherGCLeft < RT_ELEMENTS(aScatterGatherReadGC)) + ? cScatterGatherGCLeft + : RT_ELEMENTS(aScatterGatherReadGC); + cScatterGatherGCLeft -= cScatterGatherGCRead; - /* The address is now page aligned. */ - while (cbDataToTransfer) - { - /* Check if this is the last page the buffer is in. */ - if (cbDataToTransfer < PAGE_SIZE) - { - pScatterGatherCurrent->cbSeg = cbDataToTransfer; - cbDataToTransfer = 0; - } - else + /* Read the SG entries. */ + PDMDevHlpPhysRead(pDevIns, GCPhysAddrScatterGatherCurrent, &aScatterGatherReadGC[0], + cScatterGatherGCRead * sizeof(ScatterGatherEntry)); + + for (iScatterGatherEntry = 0; iScatterGatherEntry < cScatterGatherGCRead; iScatterGatherEntry++) { - cbDataToTransfer -= PAGE_SIZE; - pScatterGatherCurrent->cbSeg = PAGE_SIZE; - } + RTGCPHYS GCPhysAddrDataBase; - /* Create the mapping. */ - if (fReadonly) - rc = PDMDevHlpPhysGCPhys2CCPtrReadOnly(pDevIns, GCPhysAddrDataBase, 0, (const void **)&pScatterGatherCurrent->pvSeg, pPageLockCurrent); - else - rc = PDMDevHlpPhysGCPhys2CCPtr(pDevIns, GCPhysAddrDataBase, 0, &pScatterGatherCurrent->pvSeg, pPageLockCurrent); + Log(("%s: iScatterGatherEntry=%u\n", __FUNCTION__, iScatterGatherEntry)); - if (RT_FAILURE(rc)) - AssertMsgFailed(("Creating mapping failed rc=%Rrc\n", rc)); + GCPhysAddrDataBase = (RTGCPHYS)aScatterGatherReadGC[iScatterGatherEntry].u32PhysAddrSegmentBase; + cbDataToTransfer = aScatterGatherReadGC[iScatterGatherEntry].cbSegment; - /* Go to the next page. */ - GCPhysAddrDataBase += PAGE_SIZE; - pPageLockCurrent++; - pScatterGatherCurrent++; - } - } + Log(("%s: GCPhysAddrDataBase=%RGp cbDataToTransfer=%u\n", __FUNCTION__, GCPhysAddrDataBase, cbDataToTransfer)); - /* Set address to the next entries to read. */ - GCPhysAddrScatterGatherCurrent += cScatterGatherGCRead * sizeof(ScatterGatherEntry); + PDMDevHlpPhysRead(pDevIns, GCPhysAddrDataBase, pbData, cbDataToTransfer); + pbData += cbDataToTransfer; + } - } while (cScatterGatherGCLeft); + /* Set address to the next entries to read. */ + GCPhysAddrScatterGatherCurrent += cScatterGatherGCRead * sizeof(ScatterGatherEntry); + } while (cScatterGatherGCLeft > 0); + } - } - else if ( (pTaskState->CommandControlBlockGuest.u32PhysAddrData != 0) - && (pTaskState->CommandControlBlockGuest.cbData != 0)) - { - /* The buffer is not scattered. */ - RTGCPHYS GCPhysAddrDataBase = (RTGCPHYS)PAGE_ADDRESS(pTaskState->CommandControlBlockGuest.u32PhysAddrData); - RTGCPHYS GCPhysAddrDataEnd = (RTGCPHYS)(pTaskState->CommandControlBlockGuest.u32PhysAddrData + pTaskState->CommandControlBlockGuest.cbData); - RTGCPHYS GCPhysAddrDataEndBase = (RTGCPHYS)PAGE_ADDRESS(GCPhysAddrDataEnd); - RTGCPHYS GCPhysAddrDataNext = (RTGCPHYS)PAGE_ADDRESS(GCPhysAddrDataEnd) + PAGE_SIZE; - uint32_t cPages = (GCPhysAddrDataNext - GCPhysAddrDataBase) / PAGE_SIZE; - uint32_t cbOffsetFirstPage = pTaskState->CommandControlBlockGuest.u32PhysAddrData & PAGE_OFFSET_MASK; - - Log(("Non scattered buffer:\n")); - Log(("u32PhysAddrData=%#x\n", pTaskState->CommandControlBlockGuest.u32PhysAddrData)); - Log(("cbData=%u\n", pTaskState->CommandControlBlockGuest.cbData)); - Log(("GCPhysAddrDataBase=0x%RGp\n", GCPhysAddrDataBase)); - Log(("GCPhysAddrDataEnd=0x%RGp\n", GCPhysAddrDataEnd)); - Log(("GCPhysAddrDataEndBase=0x%RGp\n", GCPhysAddrDataEndBase)); - Log(("GCPhysAddrDataNext=0x%RGp\n", GCPhysAddrDataNext)); - Log(("cPages=%u\n", cPages)); - - pTaskState->paPageLock = (PPGMPAGEMAPLOCK)RTMemAllocZ(cPages * sizeof(PGMPAGEMAPLOCK)); - AssertMsgReturn(pTaskState->paPageLock, ("Allocating page lock array failed\n"), VERR_NO_MEMORY); - pTaskState->paScatterGather = (PPDMDATASEG)RTMemAllocZ(cPages * sizeof(PDMDATASEG)); - AssertMsgReturn(pTaskState->paScatterGather, ("Allocating scatter gather list failed\n"), VERR_NO_MEMORY); - - PPGMPAGEMAPLOCK pPageLockCurrent = pTaskState->paPageLock; - PPDMDATASEG pScatterGatherCurrent = pTaskState->paScatterGather; - - for (uint32_t i = 0; i < cPages; i++) + } + else if (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB) { - if (fReadonly) - rc = PDMDevHlpPhysGCPhys2CCPtrReadOnly(pDevIns, GCPhysAddrDataBase, 0, (const void **)&pScatterGatherCurrent->pvSeg, pPageLockCurrent); - else - rc = PDMDevHlpPhysGCPhys2CCPtr(pDevIns, GCPhysAddrDataBase, 0, &pScatterGatherCurrent->pvSeg, pPageLockCurrent); + /* The buffer is not scattered. */ + RTGCPHYS GCPhysAddrDataBase = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; - pScatterGatherCurrent->cbSeg = PAGE_SIZE; + AssertMsg(GCPhysAddrDataBase != 0, ("Physical address is 0\n")); - pPageLockCurrent++; - pScatterGatherCurrent++; - GCPhysAddrDataBase += PAGE_SIZE; - } + pTaskState->DataSeg.cbSeg = pTaskState->CommandControlBlockGuest.cbData; + pTaskState->DataSeg.pvSeg = RTMemAlloc(pTaskState->DataSeg.cbSeg); + if (!pTaskState->DataSeg.pvSeg) + return VERR_NO_MEMORY; + + Log(("Non scattered buffer:\n")); + Log(("u32PhysAddrData=%#x\n", pTaskState->CommandControlBlockGuest.u32PhysAddrData)); + Log(("cbData=%u\n", pTaskState->CommandControlBlockGuest.cbData)); + Log(("GCPhysAddrDataBase=0x%RGp\n", GCPhysAddrDataBase)); - /* Correct pointer of the first entry. */ - pTaskState->paScatterGather[0].pvSeg = (uint8_t *)pTaskState->paScatterGather[0].pvSeg + cbOffsetFirstPage; - pTaskState->paScatterGather[0].cbSeg -= cbOffsetFirstPage; - /* Correct size of the last entry. */ - pTaskState->paScatterGather[cPages-1].cbSeg = GCPhysAddrDataEnd - GCPhysAddrDataEndBase; - pTaskState->cScatterGather = cPages; - pTaskState->cbScatterGather = pTaskState->CommandControlBlockGuest.cbData; + /* Copy the data into the buffer. */ + PDMDevHlpPhysRead(pDevIns, GCPhysAddrDataBase, pTaskState->DataSeg.pvSeg, pTaskState->DataSeg.cbSeg); + } } - return rc; + return VINF_SUCCESS; } /** - * Free mapped pages and other allocated resources used for the scatter gather list. + * Free allocated resources used for the scatter gather list. * * @returns nothing. * @param pTaskState Pointer to the task state. */ -static void buslogicFreeGCDataBuffer(PBUSLOGICTASKSTATE pTaskState) +static void buslogicDataBufferFree(PBUSLOGICTASKSTATE pTaskState) { - PPGMPAGEMAPLOCK pPageMapLock = pTaskState->paPageLock; - PPDMDEVINS pDevIns = pTaskState->CTX_SUFF(pTargetDevice)->CTX_SUFF(pBusLogic)->CTX_SUFF(pDevIns); + PPDMDEVINS pDevIns = pTaskState->CTX_SUFF(pTargetDevice)->CTX_SUFF(pBusLogic)->CTX_SUFF(pDevIns); - for (uint32_t iPageLockCurrent = 0; iPageLockCurrent < pTaskState->cScatterGather; iPageLockCurrent++) + if ( (pTaskState->CommandControlBlockGuest.cbData > 0) + && ( (pTaskState->CommandControlBlockGuest.uDataDirection == BUSLOGIC_CCB_DIRECTION_IN) + || (pTaskState->CommandControlBlockGuest.uDataDirection == BUSLOGIC_CCB_DIRECTION_UNKNOWN))) { - PDMDevHlpPhysReleasePageMappingLock(pDevIns, pPageMapLock); - pPageMapLock++; + if ( (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB_SCATTER_GATHER) + || (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB_RESIDUAL_SCATTER_GATHER)) + { + uint32_t cScatterGatherGCRead; + uint32_t iScatterGatherEntry; + ScatterGatherEntry aScatterGatherReadGC[32]; /* Number of scatter gather list entries read from guest memory. */ + uint32_t cScatterGatherGCLeft = pTaskState->CommandControlBlockGuest.cbData / sizeof(ScatterGatherEntry); + RTGCPHYS GCPhysAddrScatterGatherCurrent = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; + uint8_t *pbData = (uint8_t *)pTaskState->DataSeg.pvSeg; + + do + { + cScatterGatherGCRead = (cScatterGatherGCLeft < RT_ELEMENTS(aScatterGatherReadGC)) + ? cScatterGatherGCLeft + : RT_ELEMENTS(aScatterGatherReadGC); + cScatterGatherGCLeft -= cScatterGatherGCRead; + + /* Read the SG entries. */ + PDMDevHlpPhysRead(pDevIns, GCPhysAddrScatterGatherCurrent, &aScatterGatherReadGC[0], + cScatterGatherGCRead * sizeof(ScatterGatherEntry)); + + for (iScatterGatherEntry = 0; iScatterGatherEntry < cScatterGatherGCRead; iScatterGatherEntry++) + { + RTGCPHYS GCPhysAddrDataBase; + size_t cbDataToTransfer; + + Log(("%s: iScatterGatherEntry=%u\n", __FUNCTION__, iScatterGatherEntry)); + + GCPhysAddrDataBase = (RTGCPHYS)aScatterGatherReadGC[iScatterGatherEntry].u32PhysAddrSegmentBase; + cbDataToTransfer = aScatterGatherReadGC[iScatterGatherEntry].cbSegment; + + Log(("%s: GCPhysAddrDataBase=%RGp cbDataToTransfer=%u\n", __FUNCTION__, GCPhysAddrDataBase, cbDataToTransfer)); + + PDMDevHlpPhysWrite(pDevIns, GCPhysAddrDataBase, pbData, cbDataToTransfer); + pbData += cbDataToTransfer; + } + + /* Set address to the next entries to read. */ + GCPhysAddrScatterGatherCurrent += cScatterGatherGCRead * sizeof(ScatterGatherEntry); + } while (cScatterGatherGCLeft > 0); + + } + else if (pTaskState->CommandControlBlockGuest.uOpcode == BUSLOGIC_CCB_OPCODE_INITIATOR_CCB) + { + /* The buffer is not scattered. */ + RTGCPHYS GCPhysAddrDataBase = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrData; + + AssertMsg(GCPhysAddrDataBase != 0, ("Physical address is 0\n")); + + Log(("Non scattered buffer:\n")); + Log(("u32PhysAddrData=%#x\n", pTaskState->CommandControlBlockGuest.u32PhysAddrData)); + Log(("cbData=%u\n", pTaskState->CommandControlBlockGuest.cbData)); + Log(("GCPhysAddrDataBase=0x%RGp\n", GCPhysAddrDataBase)); + + /* Copy the data into the guest memory. */ + PDMDevHlpPhysWrite(pDevIns, GCPhysAddrDataBase, pTaskState->DataSeg.pvSeg, pTaskState->DataSeg.cbSeg); + } } - /* @todo: optimize with caching. */ - RTMemFree(pTaskState->paPageLock); - RTMemFree(pTaskState->paScatterGather); - pTaskState->paPageLock = NULL; - pTaskState->paScatterGather = NULL; - pTaskState->cScatterGather = 0; - pTaskState->cbScatterGather = 0; + RTMemFree(pTaskState->DataSeg.pvSeg); + pTaskState->DataSeg.pvSeg = NULL; + pTaskState->DataSeg.cbSeg = 0; } /** @@ -1272,45 +1197,36 @@ static void buslogicFreeGCDataBuffer(PBUSLOGICTASKSTATE pTaskState) * @returns nothing. * @param pTaskState Pointer to the task state. */ -static void buslogicFreeGCSenseBuffer(PBUSLOGICTASKSTATE pTaskState) +static void buslogicSenseBufferFree(PBUSLOGICTASKSTATE pTaskState) { PPDMDEVINS pDevIns = pTaskState->CTX_SUFF(pTargetDevice)->CTX_SUFF(pBusLogic)->CTX_SUFF(pDevIns); + RTGCPHYS GCPhysAddrSenseBuffer = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrSenseData; + uint32_t cbSenseBuffer = pTaskState->CommandControlBlockGuest.cbSenseData; - PDMDevHlpPhysReleasePageMappingLock(pDevIns, &pTaskState->pPageLockSense); - pTaskState->pu8SenseBuffer = NULL; + /* Copy into guest memory. */ + PDMDevHlpPhysWrite(pDevIns, GCPhysAddrSenseBuffer, pTaskState->pbSenseBuffer, cbSenseBuffer); + + RTMemFree(pTaskState->pbSenseBuffer); + pTaskState->pbSenseBuffer = NULL; } /** - * Map the sense buffer into R3. + * Alloc the sense buffer. * * @returns VBox status code. * @param pTaskState Pointer to the task state. * @note Current assumption is that the sense buffer is not scattered and does not cross a page boundary. */ -static int buslogicMapGCSenseBufferIntoR3(PBUSLOGICTASKSTATE pTaskState) +static int buslogicSenseBufferAlloc(PBUSLOGICTASKSTATE pTaskState) { - int rc = VINF_SUCCESS; PPDMDEVINS pDevIns = pTaskState->CTX_SUFF(pTargetDevice)->CTX_SUFF(pBusLogic)->CTX_SUFF(pDevIns); - RTGCPHYS GCPhysAddrSenseBuffer = (RTGCPHYS)pTaskState->CommandControlBlockGuest.u32PhysAddrSenseData; -#ifdef RT_STRICT uint32_t cbSenseBuffer = pTaskState->CommandControlBlockGuest.cbSenseData; -#endif - RTGCPHYS GCPhysAddrSenseBufferBase = PAGE_ADDRESS(GCPhysAddrSenseBuffer); - - AssertMsg(GCPhysAddrSenseBuffer >= GCPhysAddrSenseBufferBase, - ("Impossible GCPhysAddrSenseBuffer < GCPhysAddrSenseBufferBase\n")); - - /* Sanity checks for the assumption. */ - AssertMsg(((GCPhysAddrSenseBuffer + cbSenseBuffer) < (GCPhysAddrSenseBufferBase + PAGE_SIZE)), - ("Sense buffer crosses page boundary\n")); - rc = PDMDevHlpPhysGCPhys2CCPtr(pDevIns, GCPhysAddrSenseBufferBase, 0, (void **)&pTaskState->pu8SenseBuffer, &pTaskState->pPageLockSense); - AssertMsgRC(rc, ("Mapping sense buffer failed rc=%Rrc\n", rc)); + pTaskState->pbSenseBuffer = (uint8_t *)RTMemAllocZ(cbSenseBuffer); + if (!pTaskState->pbSenseBuffer) + return VERR_NO_MEMORY; - /* Correct start address of the sense buffer. */ - pTaskState->pu8SenseBuffer += (GCPhysAddrSenseBuffer - GCPhysAddrSenseBufferBase); - - return rc; + return VINF_SUCCESS; } #endif /* IN_RING3 */ @@ -1586,8 +1502,7 @@ static int buslogicRegisterRead(PBUSLOGIC pBusLogic, unsigned iRegister, uint32_ break; } default: - AssertMsgFailed(("Register not available\n")); - rc = VERR_IOM_IOPORT_UNUSED; + *pu32 = UINT32_C(0xffffffff); } Log2(("%s: pu32=%p:{%.*Rhxs} iRegister=%d rc=%Rrc\n", @@ -1629,7 +1544,7 @@ static int buslogicRegisterWrite(PBUSLOGIC pBusLogic, unsigned iRegister, uint8_ case BUSLOGIC_REGISTER_COMMAND: { /* Fast path for mailbox execution command. */ - if ((uVal == BUSLOGICCOMMAND_EXECUTE_MAILBOX_COMMAND) && (pBusLogic->uOperationCode = 0xff)) + if ((uVal == BUSLOGICCOMMAND_EXECUTE_MAILBOX_COMMAND) && (pBusLogic->uOperationCode == 0xff)) { ASMAtomicIncU32(&pBusLogic->cMailboxesReady); if (!ASMAtomicXchgBool(&pBusLogic->fNotificationSend, true)) @@ -1830,8 +1745,8 @@ static int buslogicIsaIOPortRead (PPDMDEVINS pDevIns, void *pvUser, rc = vboxscsiReadRegister(&pBusLogic->VBoxSCSI, (Port - BUSLOGIC_ISA_IO_PORT), pu32); - Log2(("%s: pu32=%p:{%.*Rhxs} iRegister=%d rc=%Rrc\n", - __FUNCTION__, pu32, 1, pu32, (Port - BUSLOGIC_ISA_IO_PORT), rc)); + //Log2(("%s: pu32=%p:{%.*Rhxs} iRegister=%d rc=%Rrc\n", + // __FUNCTION__, pu32, 1, pu32, (Port - BUSLOGIC_ISA_IO_PORT), rc)); return rc; } @@ -2052,10 +1967,10 @@ static DECLCALLBACK(int) buslogicDeviceSCSIRequestCompleted(PPDMISCSIPORT pInter } else { - buslogicFreeGCDataBuffer(pTaskState); + buslogicDataBufferFree(pTaskState); - if (pTaskState->pu8SenseBuffer) - buslogicFreeGCSenseBuffer(pTaskState); + if (pTaskState->pbSenseBuffer) + buslogicSenseBufferFree(pTaskState); buslogicSendIncomingMailbox(pBusLogic, pTaskState, BUSLOGIC_MAILBOX_INCOMING_ADAPTER_STATUS_CMD_COMPLETED, @@ -2120,8 +2035,6 @@ static int buslogicProcessMailboxNext(PBUSLOGIC pBusLogic) if (pTaskState->MailboxGuest.u.out.uActionCode == BUSLOGIC_MAILBOX_OUTGOING_ACTION_START_COMMAND) { - bool fReadonly = false; - /* Fetch CCB now. */ RTGCPHYS GCPhysAddrCCB = (RTGCPHYS)pTaskState->MailboxGuest.u32PhysAddrCCB; PDMDevHlpPhysRead(pBusLogic->CTX_SUFF(pDevIns), GCPhysAddrCCB, @@ -2134,38 +2047,23 @@ static int buslogicProcessMailboxNext(PBUSLOGIC pBusLogic) buslogicDumpCCBInfo(&pTaskState->CommandControlBlockGuest); #endif - switch (pTaskState->CommandControlBlockGuest.uDataDirection) - { - case BUSLOGIC_CCB_DIRECTION_UNKNOWN: - case BUSLOGIC_CCB_DIRECTION_IN: - fReadonly = false; - break; - case BUSLOGIC_CCB_DIRECTION_OUT: - case BUSLOGIC_CCB_DIRECTION_NO_DATA: - fReadonly = true; - break; - default: - AssertMsgFailed(("Invalid data transfer direction type %u\n", - pTaskState->CommandControlBlockGuest.uDataDirection)); - } - - /* Map required buffers. */ - rc = buslogicMapGCDataBufIntoR3(pTaskState, fReadonly); - AssertMsgRC(rc, ("Mapping failed rc=%Rrc\n", rc)); + /* Alloc required buffers. */ + rc = buslogicDataBufferAlloc(pTaskState); + AssertMsgRC(rc, ("Alloc failed rc=%Rrc\n", rc)); if (pTaskState->CommandControlBlockGuest.cbSenseData) { - rc = buslogicMapGCSenseBufferIntoR3(pTaskState); + rc = buslogicSenseBufferAlloc(pTaskState); AssertMsgRC(rc, ("Mapping sense buffer failed rc=%Rrc\n", rc)); } /* Check if device is present on bus. If not return error immediately and don't process this further. */ if (!pBusLogic->aDeviceStates[pTaskState->CommandControlBlockGuest.uTargetId].fPresent) { - buslogicFreeGCDataBuffer(pTaskState); + buslogicDataBufferFree(pTaskState); - if (pTaskState->pu8SenseBuffer) - buslogicFreeGCSenseBuffer(pTaskState); + if (pTaskState->pbSenseBuffer) + buslogicSenseBufferFree(pTaskState); buslogicSendIncomingMailbox(pBusLogic, pTaskState, BUSLOGIC_MAILBOX_INCOMING_ADAPTER_STATUS_SCSI_SELECTION_TIMEOUT, @@ -2193,11 +2091,20 @@ static int buslogicProcessMailboxNext(PBUSLOGIC pBusLogic) pTaskState->PDMScsiRequest.cbCDB = pTaskState->CommandControlBlockGuest.cbCDB; pTaskState->PDMScsiRequest.pbCDB = pTaskState->CommandControlBlockGuest.aCDB; - pTaskState->PDMScsiRequest.cbScatterGather = pTaskState->cbScatterGather; - pTaskState->PDMScsiRequest.cScatterGatherEntries = pTaskState->cScatterGather; - pTaskState->PDMScsiRequest.paScatterGatherHead = pTaskState->paScatterGather; + if (pTaskState->DataSeg.cbSeg) + { + pTaskState->PDMScsiRequest.cbScatterGather = pTaskState->DataSeg.cbSeg; + pTaskState->PDMScsiRequest.cScatterGatherEntries = 1; + pTaskState->PDMScsiRequest.paScatterGatherHead = &pTaskState->DataSeg; + } + else + { + pTaskState->PDMScsiRequest.cbScatterGather = 0; + pTaskState->PDMScsiRequest.cScatterGatherEntries = 0; + pTaskState->PDMScsiRequest.paScatterGatherHead = NULL; + } pTaskState->PDMScsiRequest.cbSenseBuffer = pTaskState->CommandControlBlockGuest.cbSenseData; - pTaskState->PDMScsiRequest.pbSenseBuffer = pTaskState->pu8SenseBuffer; + pTaskState->PDMScsiRequest.pbSenseBuffer = pTaskState->pbSenseBuffer; pTaskState->PDMScsiRequest.pvUser = pTaskState; LogFlowFunc(("before increment %u\n", pTargetDevice->cOutstandingRequests)); diff --git a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp index 2491f1d05..9c7569682 100644 --- a/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp +++ b/src/VBox/Devices/Storage/DevLsiLogicSCSI.cpp @@ -2141,7 +2141,18 @@ typedef struct LSILOGICSCSI # define LSILOGIC_REG_DOORBELL_GET_SIZE(x) (((x) & 0x00ff0000) >> 16) #define LSILOGIC_REG_WRITE_SEQUENCE 0x04 + #define LSILOGIC_REG_HOST_DIAGNOSTIC 0x08 +# define LSILOGIC_REG_HOST_DIAGNOSTIC_DIAG_MEM_ENABLE (RT_BIT(0)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_DISABLE_ARM (RT_BIT(1)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_RESET_ADAPTER (RT_BIT(2)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_DIAG_RW_ENABLE (RT_BIT(4)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_RESET_HISTORY (RT_BIT(5)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_FLASH_BAD_SIG (RT_BIT(6)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_DRWE (RT_BIT(7)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_PREVENT_IOC_BOOT (RT_BIT(9)) +# define LSILOGIC_REG_HOST_DIAGNOSTIC_CLEAR_FLASH_BAD_SIG (RT_BIT(10)) + #define LSILOGIC_REG_TEST_BASE_ADDRESS 0x0c #define LSILOGIC_REG_DIAG_RW_DATA 0x10 #define LSILOGIC_REG_DIAG_RW_ADDRESS 0x14 @@ -2888,6 +2899,18 @@ static int lsilogicRegisterWrite(PLSILOGICSCSI pThis, uint32_t uOffset, void *pv } break; } + case LSILOGIC_REG_HOST_DIAGNOSTIC: + { +#ifndef IN_RING3 + return VINF_IOM_HC_IOPORT_WRITE; +#else + if (u32 & LSILOGIC_REG_HOST_DIAGNOSTIC_RESET_ADAPTER) + { + lsilogicHardReset(pThis); + } + break; +#endif + } default: /* Ignore. */ { break; @@ -2963,24 +2986,15 @@ static int lsilogicRegisterRead(PLSILOGICSCSI pThis, uint32_t uOffset, void *pv, } case LSILOGIC_REG_HOST_DIAGNOSTIC: { - //AssertMsgFailed(("todo\n")); - break; - } - case LSILOGIC_REG_TEST_BASE_ADDRESS: - { - AssertMsgFailed(("todo\n")); + if (pThis->fDiagnosticEnabled) + *pu32 = LSILOGIC_REG_HOST_DIAGNOSTIC_DRWE; + else + *pu32 = 0; break; } + case LSILOGIC_REG_TEST_BASE_ADDRESS: /* The spec doesn't say anything about these registers, so we just ignore them */ case LSILOGIC_REG_DIAG_RW_DATA: - { - AssertMsgFailed(("todo\n")); - break; - } case LSILOGIC_REG_DIAG_RW_ADDRESS: - { - AssertMsgFailed(("todo\n")); - break; - } default: /* Ignore. */ { break; diff --git a/src/VBox/Devices/Storage/VHDHDDCore.cpp b/src/VBox/Devices/Storage/VHDHDDCore.cpp index 428607f93..43597538a 100644 --- a/src/VBox/Devices/Storage/VHDHDDCore.cpp +++ b/src/VBox/Devices/Storage/VHDHDDCore.cpp @@ -112,7 +112,7 @@ typedef struct VHDDynamicDiskHeader uint8_t ParentUuid[16]; uint32_t ParentTimeStamp; uint32_t Reserved0; - uint8_t ParentUnicodeName[512]; + uint16_t ParentUnicodeName[256]; VHDPLE ParentLocatorEntry[VHD_MAX_LOCATOR_ENTRIES]; uint8_t Reserved1[256]; } VHDDynamicDiskHeader; @@ -400,7 +400,7 @@ static uint32_t vhdChecksum(void *pHeader, uint32_t cbSize) return ~checksum; } -static int vhdFilenameToUtf16(const char *pszFilename, void *pvBuf, uint32_t cbBufSize, uint32_t *pcbActualSize) +static int vhdFilenameToUtf16(const char *pszFilename, uint16_t *pu16Buf, uint32_t cbBufSize, uint32_t *pcbActualSize, bool fBigEndian) { int rc; PRTUTF16 tmp16 = NULL; @@ -415,7 +415,12 @@ static int vhdFilenameToUtf16(const char *pszFilename, void *pvBuf, uint32_t cbB rc = VERR_FILENAME_TOO_LONG; goto out; } - memcpy(pvBuf, tmp16, cTmp16Len * sizeof(*tmp16)); + + if (fBigEndian) + for (unsigned i = 0; i < cTmp16Len; i++) + pu16Buf[i] = RT_H2BE_U16(tmp16[i]); + else + memcpy(pu16Buf, tmp16, cTmp16Len * sizeof(*tmp16)); if (pcbActualSize) *pcbActualSize = (uint32_t)(cTmp16Len * sizeof(*tmp16)); @@ -463,7 +468,7 @@ static int vhdLocatorUpdate(PVHDIMAGE pImage, PVHDPLE pLocator, const char *pszF break; case VHD_PLATFORM_CODE_W2RU: /* Update unicode relative name. */ - rc = vhdFilenameToUtf16(pszFilename, pvBuf, cbMaxLen, &cb); + rc = vhdFilenameToUtf16(pszFilename, (uint16_t *)pvBuf, cbMaxLen, &cb, false); if (RT_FAILURE(rc)) goto out; pLocator->u32DataLength = RT_H2BE_U32(cb); @@ -482,7 +487,7 @@ static int vhdLocatorUpdate(PVHDIMAGE pImage, PVHDPLE pLocator, const char *pszF RTMemTmpFree(pszTmp); goto out; } - rc = vhdFilenameToUtf16(pszTmp, pvBuf, cbMaxLen, &cb); + rc = vhdFilenameToUtf16(pszTmp, (uint16_t *)pvBuf, cbMaxLen, &cb, false); RTMemTmpFree(pszTmp); if (RT_FAILURE(rc)) goto out; @@ -529,7 +534,7 @@ static int vhdDynamicHeaderUpdate(PVHDIMAGE pImage) if (pImage->pszParentFilename) { rc = vhdFilenameToUtf16(RTPathFilename(pImage->pszParentFilename), - ddh.ParentUnicodeName, sizeof(ddh.ParentUnicodeName) - 1, NULL); + ddh.ParentUnicodeName, sizeof(ddh.ParentUnicodeName) - 1, NULL, true); if (RT_FAILURE(rc)) return rc; } @@ -1449,6 +1454,10 @@ static int vhdSetUuid(void *pBackendData, PCRTUUID pUuid) /* Update checksum. */ pImage->vhdFooterCopy.Checksum = 0; pImage->vhdFooterCopy.Checksum = RT_H2BE_U32(vhdChecksum(&pImage->vhdFooterCopy, sizeof(VHDFooter))); + + /* Need to update the dynamic disk header to update the disk footer copy at the beginning. */ + if (!(pImage->uImageFlags & VD_IMAGE_FLAGS_FIXED)) + pImage->fDynHdrNeedsUpdate = true; rc = VINF_SUCCESS; } else @@ -1884,12 +1893,13 @@ static int vhdCreateImage(PVHDIMAGE pImage, uint64_t cbSize, } Footer.DataOffset = RT_H2BE_U64(pImage->u64DataOffset); - pImage->vhdFooterCopy = Footer; /* Compute and update the footer checksum. */ Footer.Checksum = 0; Footer.Checksum = RT_H2BE_U32(vhdChecksum(&Footer, sizeof(Footer))); + pImage->vhdFooterCopy = Footer; + /* Store the footer */ rc = vhdFileWriteSync(pImage, pImage->uCurrentEndOfFile, &Footer, sizeof(Footer), NULL); if (RT_FAILURE(rc)) diff --git a/src/VBox/Frontends/VBoxFB/VBoxFB.cpp b/src/VBox/Frontends/VBoxFB/VBoxFB.cpp index 75092313c..b609450f2 100644 --- a/src/VBox/Frontends/VBoxFB/VBoxFB.cpp +++ b/src/VBox/Frontends/VBoxFB/VBoxFB.cpp @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) }; printf("VirtualBox DirectFB GUI built %s %s\n" - "(C) 2004-2009 Sun Microsystems, Inc.\n" + "(C) 2004-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "(C) 2004-2005 secunet Security Networks AG\n", __DATE__, __TIME__); for (;;) diff --git a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp index 9412c0e45..4d05273d2 100644 --- a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp +++ b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp @@ -451,10 +451,9 @@ extern "C" DECLEXPORT (int) TrustedMain (int argc, char **argv, char **envp) RTEnvUnset("DISPLAY"); LogFlow (("VBoxHeadless STARTED.\n")); - RTPrintf ("VirtualBox Headless Interface %s\n" - "(C) 2008-2009 Sun Microsystems, Inc.\n" - "All rights reserved.\n\n", - VBOX_VERSION_STRING); + RTPrintf (VBOX_PRODUCT " Headless Interface " VBOX_VERSION_STRING "\n" + "(C) 2008-" VBOX_C_YEAR " " VBOX_VENDOR "\n" + "All rights reserved.\n\n"); Bstr id; /* the below cannot be Bstr because on Linux Bstr doesn't work until XPCOM (nsMemory) is initialized */ diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp index 082d7d6d5..2e1572e83 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp @@ -40,9 +40,9 @@ void showLogo(void) if (!s_fShown) { - RTPrintf("VirtualBox Command Line Management Interface Version " + RTPrintf(VBOX_PRODUCT" Command Line Management Interface Version " VBOX_VERSION_STRING "\n" - "(C) 2005-2009 Sun Microsystems, Inc.\n" + "(C) 2005-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "All rights reserved.\n" "\n"); s_fShown = true; @@ -354,6 +354,7 @@ void printUsage(USAGECATEGORY u64Cmd) " take [--description ] [--pause] |\n" " delete | |\n" " restore | |\n" + " restorecurrent |\n" " edit ||--current\n" " [--name ]\n" " [--description ] |\n" diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp index ad713a913..13fa43ec4 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp @@ -252,7 +252,10 @@ int handleSnapshot(HandlerArg *a) CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam())); /* switch based on the command */ - bool fDelete = false, fRestore = false; + bool fDelete = false, + fRestore = false, + fRestoreCurrent = false; + if (!strcmp(a->argv[1], "take")) { /* there must be a name */ @@ -338,10 +341,20 @@ int handleSnapshot(HandlerArg *a) } else if ( (fDelete = !strcmp(a->argv[1], "delete")) || (fRestore = !strcmp(a->argv[1], "restore")) + || (fRestoreCurrent = !strcmp(a->argv[1], "restorecurrent")) ) { + if (fRestoreCurrent) + { + if (a->argc > 2) + { + errorSyntax(USAGE_SNAPSHOT, "Too many arguments"); + rc = E_FAIL; + break; + } + } /* exactly one parameter: snapshot name */ - if (a->argc != 3) + else if (a->argc != 3) { errorSyntax(USAGE_SNAPSHOT, "Expecting snapshot name only"); rc = E_FAIL; @@ -349,28 +362,35 @@ int handleSnapshot(HandlerArg *a) } ComPtr pSnapshot; + ComPtr pProgress; + Bstr bstrSnapGuid; - /* assume it's a UUID */ - Bstr guidSnap(a->argv[2]); - if (!guidSnap.isEmpty()) + if (fRestoreCurrent) { - CHECK_ERROR_BREAK(pMachine, GetSnapshot(guidSnap, pSnapshot.asOutParam())); + CHECK_ERROR_BREAK(pMachine, COMGETTER(CurrentSnapshot)(pSnapshot.asOutParam())); + CHECK_ERROR_BREAK(pSnapshot, COMGETTER(Id)(bstrSnapGuid.asOutParam())); } else { - /* then it must be a name */ - CHECK_ERROR_BREAK(pMachine, FindSnapshot(Bstr(a->argv[2]), pSnapshot.asOutParam())); - pSnapshot->COMGETTER(Id)(guidSnap.asOutParam()); + // restore or delete snapshot: then resolve cmd line argument to snapshot instance + // assume it's a UUID + bstrSnapGuid = a->argv[2]; + if (FAILED(pMachine->GetSnapshot(bstrSnapGuid, pSnapshot.asOutParam()))) + { + // then it must be a name + CHECK_ERROR_BREAK(pMachine, FindSnapshot(Bstr(a->argv[2]), pSnapshot.asOutParam())); + CHECK_ERROR_BREAK(pSnapshot, COMGETTER(Id)(bstrSnapGuid.asOutParam())); + } } - ComPtr pProgress; if (fDelete) { - CHECK_ERROR_BREAK(console, DeleteSnapshot(guidSnap, pProgress.asOutParam())); + CHECK_ERROR_BREAK(console, DeleteSnapshot(bstrSnapGuid, pProgress.asOutParam())); } else { - // must be restore + // restore or restore current + RTPrintf("Restoring snapshot %ls\n", bstrSnapGuid.raw()); CHECK_ERROR_BREAK(console, RestoreSnapshot(pSnapshot, pProgress.asOutParam())); } diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp b/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp index b4eef3f82..a23341cbc 100644 --- a/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp +++ b/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp @@ -973,8 +973,8 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) SDL_Event EvHKeyDown2; LogFlow(("SDL GUI started\n")); - RTPrintf("Sun VirtualBox SDL GUI version %s\n" - "(C) 2005-2009 Sun Microsystems, Inc.\n" + RTPrintf(VBOX_PRODUCT " SDL GUI version %s\n" + "(C) 2005-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "All rights reserved.\n\n", VBOX_VERSION_STRING); @@ -985,48 +985,6 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) return 1; } - rc = com::Initialize(); - if (FAILED(rc)) - { - RTPrintf("Error: COM initialization failed, rc = 0x%x!\n", rc); - return 1; - } - - do - { - // scopes all the stuff till shutdown - //////////////////////////////////////////////////////////////////////////// - - ComPtr virtualBox; - ComPtr session; - bool sessionOpened = false; - - rc = virtualBox.createLocalObject (CLSID_VirtualBox); - if (FAILED(rc)) - { - com::ErrorInfo info; - if (info.isFullAvailable()) - PrintError("Failed to create VirtualBox object", - info.getText().raw(), info.getComponent().raw()); - else - RTPrintf("Failed to create VirtualBox object! No error information available (rc = 0x%x).\n", rc); - break; - } - rc = session.createInprocObject (CLSID_Session); - if (FAILED(rc)) - { - RTPrintf("Failed to create session object, rc = 0x%x!\n", rc); - break; - } - - EventQueue* eventQ = com::EventQueue::getMainEventQueue(); - - /* Get the number of network adapters */ - ULONG NetworkAdapterCount = 0; - ComPtr sysInfo; - virtualBox->COMGETTER(SystemProperties) (sysInfo.asOutParam()); - sysInfo->COMGETTER (NetworkAdapterCount) (&NetworkAdapterCount); - // command line argument parsing stuff for (int curArg = 1; curArg < argc; curArg++) { @@ -1040,8 +998,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: VM not specified (UUID or name)!\n"); - rc = E_FAIL; - break; + return 1; } // first check if a UUID was supplied if (RT_FAILURE(RTUuidFromStr(uuidVM.ptr(), argv[curArg]))) @@ -1056,8 +1013,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing argument for comment!\n"); - rc = E_FAIL; - break; + return 1; } } else if ( !strcmp(argv[curArg], "--boot") @@ -1066,8 +1022,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing argument for boot drive!\n"); - rc = E_FAIL; - break; + return 1; } switch (argv[curArg][0]) { @@ -1098,12 +1053,9 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) default: { RTPrintf("Error: wrong argument for boot drive!\n"); - rc = E_FAIL; - break; + return 1; } } - if (FAILED (rc)) - break; } else if ( !strcmp(argv[curArg], "--memory") || !strcmp(argv[curArg], "-memory") @@ -1112,8 +1064,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing argument for memory size!\n"); - rc = E_FAIL; - break; + return 1; } memorySize = atoi(argv[curArg]); } @@ -1123,8 +1074,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing argument for vram size!\n"); - rc = E_FAIL; - break; + return 1; } vramSize = atoi(argv[curArg]); } @@ -1148,8 +1098,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (curArg + 3 >= argc) { RTPrintf("Error: missing arguments for fixed video mode!\n"); - rc = E_FAIL; - break; + return 1; } fixedWidth = atoi(argv[++curArg]); fixedHeight = atoi(argv[++curArg]); @@ -1177,8 +1126,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing a string of disabled hostkey combinations\n"); - rc = E_FAIL; - break; + return 1; } gHostKeyDisabledCombinations = argv[curArg]; size_t cch = strlen(gHostKeyDisabledCombinations); @@ -1188,12 +1136,9 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) { RTPrintf("Error: + '%c' is not a valid combination\n", gHostKeyDisabledCombinations[i]); - rc = E_FAIL; - break; + return 1; } } - if (rc == E_FAIL) - break; } else if ( !strcmp(argv[curArg], "--nograbonclick") || !strcmp(argv[curArg], "-nograbonclick")) @@ -1211,8 +1156,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing file name for --pidfile!\n"); - rc = E_FAIL; - break; + return 1; } gpszPidFile = argv[curArg]; } @@ -1222,8 +1166,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing file name for first hard disk!\n"); - rc = E_FAIL; - break; + return 1; } /* resolve it. */ if (RTPathExists(argv[curArg])) @@ -1231,8 +1174,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (!hdaFile) { RTPrintf("Error: The path to the specified harddisk, '%s', could not be resolved.\n", argv[curArg]); - rc = E_FAIL; - break; + return 1; } } else if ( !strcmp(argv[curArg], "--fda") @@ -1241,8 +1183,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing file/device name for first floppy disk!\n"); - rc = E_FAIL; - break; + return 1; } /* resolve it. */ if (RTPathExists(argv[curArg])) @@ -1250,8 +1191,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (!fdaFile) { RTPrintf("Error: The path to the specified floppy disk, '%s', could not be resolved.\n", argv[curArg]); - rc = E_FAIL; - break; + return 1; } } else if ( !strcmp(argv[curArg], "--cdrom") @@ -1260,8 +1200,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing file/device name for cdrom!\n"); - rc = E_FAIL; - break; + return 1; } /* resolve it. */ if (RTPathExists(argv[curArg])) @@ -1269,8 +1208,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (!cdromFile) { RTPrintf("Error: The path to the specified cdrom, '%s', could not be resolved.\n", argv[curArg]); - rc = E_FAIL; - break; + return 1; } } #if defined(RT_OS_LINUX) && defined(VBOXSDL_WITH_X11) @@ -1314,8 +1252,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing font file name for secure label!\n"); - rc = E_FAIL; - break; + return 1; } secureLabelFontFile = argv[curArg]; } @@ -1325,8 +1262,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing font point size for secure label!\n"); - rc = E_FAIL; - break; + return 1; } secureLabelPointSize = atoi(argv[curArg]); } @@ -1336,8 +1272,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing font pixel offset for secure label!\n"); - rc = E_FAIL; - break; + return 1; } secureLabelFontOffs = atoi(argv[curArg]); } @@ -1347,8 +1282,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing text color value for secure label!\n"); - rc = E_FAIL; - break; + return 1; } sscanf(argv[curArg], "%X", &secureLabelColorFG); } @@ -1358,8 +1292,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing background color value for secure label!\n"); - rc = E_FAIL; - break; + return 1; } sscanf(argv[curArg], "%X", &secureLabelColorBG); } @@ -1401,15 +1334,13 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg >= argc) { RTPrintf("Error: missing the rate value for the --warpdrive option!\n"); - rc = E_FAIL; - break; + return 1; } u32WarpDrive = RTStrToUInt32(argv[curArg]); if (u32WarpDrive < 2 || u32WarpDrive > 20000) { RTPrintf("Error: the warp drive rate is restricted to [2..20000]. (%d)\n", u32WarpDrive); - rc = E_FAIL; - break; + return 1; } } #endif /* VBOXSDL_ADVANCED_OPTIONS */ @@ -1427,8 +1358,7 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) if (++curArg + 1 >= argc) { RTPrintf("Error: not enough arguments for host keys!\n"); - rc = E_FAIL; - break; + return 1; } gHostKeySym1 = atoi(argv[curArg++]); if (curArg + 1 < argc && (argv[curArg+1][0] == '0' || atoi(argv[curArg+1]) > 0)) @@ -1449,8 +1379,44 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) return 1; } } + + rc = com::Initialize(); + if (FAILED(rc)) + { + RTPrintf("Error: COM initialization failed, rc = 0x%x!\n", rc); + return 1; + } + + /* NOTE: do not convert the following scope to a "do {} while (0);", as + * this would make it all too tempting to use "break;" incorrectly - it + * would skip over the cleanup. */ + { + // scopes all the stuff till shutdown + //////////////////////////////////////////////////////////////////////////// + + ComPtr virtualBox; + ComPtr session; + bool sessionOpened = false; + EventQueue* eventQ = com::EventQueue::getMainEventQueue(); + const CLSID sessionID = CLSID_Session; + + rc = virtualBox.createLocalObject(CLSID_VirtualBox); + if (FAILED(rc)) + { + com::ErrorInfo info; + if (info.isFullAvailable()) + PrintError("Failed to create VirtualBox object", + info.getText().raw(), info.getComponent().raw()); + else + RTPrintf("Failed to create VirtualBox object! No error information available (rc = 0x%x).\n", rc); + goto leave; + } + rc = session.createInprocObject(sessionID); if (FAILED(rc)) - break; + { + RTPrintf("Failed to create session object, rc = 0x%x!\n", rc); + goto leave; + } /* * Do we have a name but no UUID? @@ -1782,7 +1748,9 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) gProgress = NULL; ComPtr pCurrentSnapshot; - CHECK_ERROR_BREAK(gMachine, COMGETTER(CurrentSnapshot)(pCurrentSnapshot.asOutParam())); + CHECK_ERROR(gMachine, COMGETTER(CurrentSnapshot)(pCurrentSnapshot.asOutParam())); + if (FAILED(rc)) + goto leave; CHECK_ERROR(gConsole, RestoreSnapshot(pCurrentSnapshot, gProgress.asOutParam())); rc = gProgress->WaitForCompletion(-1); @@ -2787,16 +2755,17 @@ leave: /** @todo power off paused VMs too? */ ) ) + do { cbConsoleImpl->ignorePowerOffEvents(true); - ComPtr progress; + ComPtr progress; CHECK_ERROR_BREAK(gConsole, PowerDown(progress.asOutParam())); - CHECK_ERROR_BREAK (progress, WaitForCompletion (-1)); + CHECK_ERROR_BREAK(progress, WaitForCompletion(-1)); BOOL completed; - CHECK_ERROR_BREAK (progress, COMGETTER(Completed) (&completed)); + CHECK_ERROR_BREAK(progress, COMGETTER(Completed)(&completed)); ASSERT (completed); LONG hrc; - CHECK_ERROR_BREAK (progress, COMGETTER(ResultCode) (&hrc)); + CHECK_ERROR_BREAK(progress, COMGETTER(ResultCode)(&hrc)); if (FAILED(hrc)) { com::ErrorInfo info; @@ -2807,7 +2776,7 @@ leave: RTPrintf("Failed to power down virtual machine! No error information available (rc = 0x%x).\n", hrc); break; } - } + } while (0); /* * Now we discard all settings so that our changes will @@ -2896,6 +2865,11 @@ leave: if (gLibrarySDL_ttf) RTLdrClose(gLibrarySDL_ttf); #endif + + /* VirtualBox callback unregistration. */ + if (!virtualBox.isNull() && !callback.isNull()) + virtualBox->UnregisterCallback(callback); + LogFlow(("Releasing machine, session...\n")); gMachine = NULL; session = NULL; @@ -2905,18 +2879,17 @@ leave: // end "all-stuff" scope //////////////////////////////////////////////////////////////////////////// } - while (0); /* Must be before com::Shutdown() */ callback.setNull(); consoleCallback.setNull(); - + LogFlow(("Uninitializing COM...\n")); com::Shutdown(); LogFlow(("Returning from main()!\n")); RTLogFlush(NULL); - return FAILED (rc) ? 1 : 0; + return FAILED(rc) ? 1 : 0; } @@ -4269,16 +4242,11 @@ static void UpdateTitlebar(TitlebarMode mode, uint32_t u32User) char szPrevTitle[1024]; strcpy(szPrevTitle, szTitle); - - strcpy(szTitle, "Sun VirtualBox - "); - Bstr name; gMachine->COMGETTER(Name)(name.asOutParam()); - if (name) - strcat(szTitle, Utf8Str(name).raw()); - else - strcat(szTitle, ""); + RTStrPrintf(szTitle, sizeof(szTitle), "%s - " VBOX_PRODUCT, + name ? Utf8Str(name).raw() : ""); /* which mode are we in? */ switch (mode) @@ -4288,15 +4256,15 @@ static void UpdateTitlebar(TitlebarMode mode, uint32_t u32User) MachineState_T machineState; gMachine->COMGETTER(State)(&machineState); if (machineState == MachineState_Paused) - strcat(szTitle, " - [Paused]"); + RTStrPrintf(szTitle + strlen(szTitle), sizeof(szTitle) - strlen(szTitle), " - [Paused]"); if (gfGrabbed) - strcat(szTitle, " - [Input captured]"); + RTStrPrintf(szTitle + strlen(szTitle), sizeof(szTitle) - strlen(szTitle), " - [Input captured]"); +#if defined(DEBUG) || defined(VBOX_WITH_STATISTICS) // do we have a debugger interface if (gMachineDebugger) { -#if defined(DEBUG) || defined(VBOX_WITH_STATISTICS) // query the machine state BOOL recompileSupervisor = FALSE; BOOL recompileUser = FALSE; @@ -4324,13 +4292,8 @@ static void UpdateTitlebar(TitlebarMode mode, uint32_t u32User) RTStrPrintf(psz, &szTitle[sizeof(szTitle)] - psz, " WD=%d%%]", virtualTimeRate); else RTStrPrintf(psz, &szTitle[sizeof(szTitle)] - psz, "]"); -#else - BOOL hwVirtEnabled = FALSE; - gMachineDebugger->COMGETTER(HWVirtExEnabled)(&hwVirtEnabled); - RTStrPrintf(szTitle + strlen(szTitle), sizeof(szTitle) - strlen(szTitle), - "%s", hwVirtEnabled ? " (HWVirtEx)" : ""); -#endif /* DEBUG */ } +#endif /* DEBUG || VBOX_WITH_STATISTICS */ break; } @@ -4342,7 +4305,8 @@ static void UpdateTitlebar(TitlebarMode mode, uint32_t u32User) MachineState_T machineState; gMachine->COMGETTER(State)(&machineState); if (machineState == MachineState_Starting) - strcat(szTitle, " - Starting..."); + RTStrPrintf(szTitle + strlen(szTitle), sizeof(szTitle) - strlen(szTitle), + " - Starting..."); else if (machineState == MachineState_Restoring) { ULONG cPercentNow; @@ -4402,7 +4366,7 @@ static void UpdateTitlebar(TitlebarMode mode, uint32_t u32User) #ifdef VBOX_WIN32_UI setUITitle(szTitle); #else - SDL_WM_SetCaption(szTitle, "Sun VirtualBox"); + SDL_WM_SetCaption(szTitle, VBOX_PRODUCT); #endif } diff --git a/src/VBox/Frontends/VBoxShell/vboxinfo.vbs b/src/VBox/Frontends/VBoxShell/vboxinfo.vbs index 142ad865a..3e1db65cc 100644 --- a/src/VBox/Frontends/VBoxShell/vboxinfo.vbs +++ b/src/VBox/Frontends/VBoxShell/vboxinfo.vbs @@ -1,18 +1,18 @@ ' -' Copyright (C) 2009 Sun Microsystems, Inc. -' -' 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. -' -' Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa -' Clara, CA 95054 USA or visit http://www.sun.com if you need -' additional information or have any questions. -' +' Copyright (C) 2009 Sun Microsystems, Inc. +' +' 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. +' +' Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +' Clara, CA 95054 USA or visit http://www.sun.com if you need +' additional information or have any questions. +' Sub Print(str) Wscript.Echo str diff --git a/src/VBox/Frontends/VirtualBox/VBoxUI.pro b/src/VBox/Frontends/VirtualBox/VBoxUI.pro index af741c793..523f89244 100644 --- a/src/VBox/Frontends/VirtualBox/VBoxUI.pro +++ b/src/VBox/Frontends/VirtualBox/VBoxUI.pro @@ -66,6 +66,7 @@ TRANSLATIONS = \ nls/VirtualBox_tr.ts \ nls/VirtualBox_id.ts \ nls/VirtualBox_ca.ts \ + nls/VirtualBox_ca_VA.ts \ nls/VirtualBox_sk.ts \ nls/VirtualBox_eu.ts \ nls/VirtualBox_nl.ts \ diff --git a/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk b/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk index a11666967..0e3ae4f54 100644 --- a/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk +++ b/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk @@ -44,6 +44,7 @@ VBOX_APPROVED_GUI_LANGUAGES := \ sk \ eu \ ca \ + ca_VA \ id \ tr \ km_KH \ diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts new file mode 100644 index 000000000..f94c2ff2d --- /dev/null +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts @@ -0,0 +1,10786 @@ + + + + + @@@ + + English + Native language name + Català (valencià) + + + -- + Native language country name (empty if this language is for all countries) + + + + English + Language name, in English + Catalan (Valencian) + + + -- + Language country name, in English (empty if native country name is empty) + + + + Sun Microsystems, Inc. + Comma-separated list of translators + Vicent Fornés, Pau Iranzo <info@somgnu.cat>. + + + + AttachmentsModel + + Double-click to add a new attachment + Doble clic per afegir una nova adjunció + + + Hard Disk + Disc dur + + + Slot + Ranura + + + + BootItemsList + + Move Up (Ctrl-Up) + Mou amunt (Ctrl+Fletxa amunt) + + + Move Down (Ctrl-Down) + Mou avall (Ctrl+Fletxa avall) + + + Moves the selected boot device up. + Mou amunt el dispositiu d'arrecada seleccionat. + + + Moves the selected boot device down. + Mou avall el dispositiu d'arrencada seleccionat. + + + + BootItemsTable + + 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. + Definiu l'orde 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'orde dels dispositius. + + + + HDItemsModel + + Double-click to add a new attachment + Doble clic per afegir una nova adjunció + + + Hard Disk + Disc dur + + + Slot + Ranura + + + + QApplication + + 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. + Este 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 este 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'orde <br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>. + + + 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. + 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. Este paquet manté actiu el mòdul quan hi ha canvis al nucli i el recompila si és necessari. + + + Make sure the kernel module has been loaded successfully. + Assegureu-vos que el mòdul del nucli s'ha carregat correctament. + + + Executable <b>%1</b> requires Qt %2.x, found Qt %3. + L'executable <b>%1</b> necessita Qt %2.x, però s'ha trobat Qt %3. + + + Incompatible Qt Library Error + S'ha produït un error de biblioteca Qt incompatible + + + VirtualBox - Runtime Error + VirtualBox - Error d'execució + + + <b>Cannot access the kernel driver!</b><br/><br/> + <b>No es pot accedir al controlador del nucli</b><br/><br/> + + + Kernel driver not accessible + No es pot accedir al controlador del nucli + + + Unknown error %2 during initialization of the Runtime + S'ha produït un error desconegut %2 quan s'iniciava l'execució + + + VirtualBox - Error In %1 + VirtualBox - Error en %1 + + + <html><b>%1 (rc=%2)</b><br/><br/> + <html><b>%1 (rc=%2)</b><br/><br/> + + + Please try reinstalling VirtualBox. + Hauria d'ajudar-vos a tornar a instal·lar VirtualBox. + + + 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. + Els mòduls del nucli del VirtualBox no coincideixen amb esta versió del VirtualBox. La instal·lació no s'ha completat. Proveu desinstal·lant i tornant a instal·lar el VirtualBox. + + + 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. + Els mòduls del nucli del VirtualBox no coincideixen amb esta 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. + + + This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed. + Este error pot ser degut al fet que el nucli no ha pogut assignar memòria suficient o bé que alguna operació de mapatge ha fallat. + + + + QIArrowSplitter + + &Back + &Arrere + + + &Next + &Següent + + + + QIFileDialog + + Select a directory + Seleccioneu un directori + + + Select a file + Seleccioneu un fitxer + + + + QIHelpButton + + &Help + &Ajuda + + + + QIHotKeyEdit + + Left + Esquerra + + + Right + Dreta + + + Left Shift + Tecla de majúscules esquerra + + + Right Shift + Tecla de majúscules dreta + + + Left Ctrl + Control esquerra + + + Right Ctrl + Control dreta + + + Left Alt + Alt esquerra + + + Right Alt + Alt dreta + + + Left WinKey + Tecla de Windows esquerra + + + Right WinKey + Tecla de Windows dreta + + + Menu key + Tecla de menú + + + Alt Gr + Alt Gr + + + Caps Lock + Tecla de fixació de majúscules + + + Scroll Lock + Tecla de fixació de desplaçament + + + <key_%1> + <key_%1> + + + Pause + Pausa + + + Print Screen + Tecla d'impressió de pantalla + + + F1 + F1 + + + F2 + F2 + + + F3 + F3 + + + F4 + F4 + + + F5 + F5 + + + F6 + F6 + + + F7 + F7 + + + F8 + F8 + + + F9 + F9 + + + F10 + F10 + + + F11 + F11 + + + F12 + F12 + + + F13 + F13 + + + F14 + F14 + + + F15 + F15 + + + F16 + F16 + + + F17 + F17 + + + F18 + F18 + + + F19 + F19 + + + F20 + F20 + + + F21 + F21 + + + F22 + F22 + + + F23 + F23 + + + F24 + F24 + + + Num Lock + Tecla de fixació de teclat numèric + + + Forward + Avant + + + Back + Arrere + + + + QIHttp + + Connection timed out + S'ha excedit el temps d'espera de la connexió + + + Could not locate the file on the server (response: %1) + No es pot localitzar el fitxer al servidor (resposta: %1) + + + + QILabel + + &Copy + &Copia + + + + QILabelPrivate + + &Copy + &Copia + + + + QIMessageBox + + OK + D'acord + + + Yes + + + + No + No + + + Cancel + Cancel·la + + + Ignore + Ignora + + + &Details + &Detalls + + + &Details (%1 of %2) + &Detalls (%1 de %2) + + + + QIRichLabel + + Copy to clipboard + Copia al porta-retalls + + + + QIWidgetValidator + + not complete + value state + no és complet + + + invalid + value state + és invàlid + + + <qt>The value of the <b>%1</b> field on the <b>%2</b> page is %3.</qt> + <qt>El valor del camp <b>%1</b> a la pàgina <b>%2</b> %3.</qt> + + + <qt>One of the values on the <b>%1</b> page is %2.</qt> + <qt>Un dels valors a la pàgina <b>%1</b> %2.</qt> + + + + VBoxAboutDlg + + VirtualBox - About + Quant al VirtualBox + + + <qt>VirtualBox Graphical User Interface Version %1<br> +%2</qt> + <qt>Interfície gràfica d'usuari del VirtualBox versió %1<br> +%2</qt> + + + <qt>VirtualBox Graphical User Interface Version %1<br>%2</qt> + <qt>Interfície gràfica d'usuari del VirtualBox versió %1<br>%2</qt> + + + VirtualBox Graphical User Interface + Interfície gràfica d'usuari del VirtualBox + + + Version %1 + Versió %1 + + + + VBoxAboutNonOSEDlg + + VirtualBox - About + VirtualBox - Quant a + + + VirtualBox Graphical User Interface +Version %1 + Interfície Gràfica d'Usuari de VirtualBox +Versió %1 + + + + VBoxAddNIDialog + + Add Host Interface + Afig una interfície de l'amfitrió + + + Interface Name + Nom de la interfície + + + Descriptive name of the new network interface + Nom descriptiu de la interfície de xarxa nova + + + &OK + &D'acord + + + Cancel + Cancel·la + + + + VBoxAddSFDialog + + Add Share + Afig una compartició + + + Edit Share + Edita la compartició + + + Select a folder to share + Selecciona una carpeta per compartir + + + Folder Path + Ruta cap a la carpeta + + + Folder Name + Nom de la carpeta + + + Displays the path to an existing folder on the host PC. + Mostra la ruta cap a una carpeta existent en l'ordinador amfitrió. + + + Displays the name of the shared folder (as it will be seen by the guest OS). + Mostra el nom de la carpeta compartida (tal com es veu des del sistema operatiu client). + + + Opens the dialog to select a folder. + Obri un diàleg per seleccionar una carpeta. + + + Cancel + Cancel·la + + + &OK + &D'acord + + + &Make Permanent + &Fes permanent + + + &Read-only + &Només lectura + + + When checked, the guest OS will not be able to write to the specified shared folder. + Quan estiga marcat, el sistema operatiu client no podrà escriure a la carpeta compartida especificada. + + + + VBoxAdditionsDownloader + + Cancel + Cancel·la + + + Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr> + S'està baixant la imatge de les Guest Additions del VirtualBox des de <nobr><b>%1</b>...</nobr> + + + Cancel the VirtualBox Guest Additions CD image download + Cancel·la la baixada de la imatge de les Guest Additions del VirtualBox + + + <p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p> + <p>No s'ha pogut alçar el fitxer baixat com a <nobr><b>%1</b>.</nobr></p> + + + Select folder to save Guest Additions image to + Seleccioneu la carpeta on alçar la imatge de les Guest Additions + + + + VBoxApplianceEditorWgt + + Virtual System %1 + Sistema virtual %1 + + + Name + Nom + + + Product + Producte + + + Product-URL + URL del producte + + + Vendor + Venedor + + + Vendor-URL + URL del venedor + + + Version + Versió + + + Description + Descripció + + + License + Llicència + + + Guest OS Type + Tipus de sistema client + + + CPU + CPU + + + RAM + RAM + + + Hard Disk Controller (IDE) + Controlador de disc IDE + + + Hard Disk Controller (SATA) + Controlador de disc SATA + + + Hard Disk Controller (SCSI) + Controlador de disc SCSI + + + DVD + DVD + + + Floppy + Disquet + + + Network Adapter + Adaptador de xarxa + + + USB Controller + Controlador USB + + + Sound Card + Targeta de so + + + Virtual Disk Image + Imatge de disc virtual + + + Unknown Hardware Item + Maquinari desconegut + + + MB + MB + + + <b>Original Value:</b> %1 + <b>Valor original:</b> %1 + + + Configuration + Configuració + + + Warnings: + Avisos: + + + + VBoxCloseVMDlg + + Close Virtual Machine + Tanca la màquina virtual + + + You want to: + Voleu: + + + &Save the machine state + &Alça l'estat de la màquina + + + &Power off the machine + &Atura la màquina + + + &Revert to the current snapshot + &Torna a la captura actual + + + Revert the machine state to the state stored in the current snapshot + Torna l'estat de la màquina a l'estat emmagatzemat a la captura actual + + + Help + Ajuda + + + F1 + F1 + + + &OK + &D'acord + + + Cancel + Cancel·la + + + <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> + <p>Alça 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 esta màquina, es restaurarà des de l'estat alçat i continuarà l'execució des del mateix lloc en què l'heu alçat, cosa que vos permetrà continuar immediatament amb el vostre treball.</p> +<p>Tingueu en compte que l'operació d'alçar 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> + + + S&end the shutdown signal + &Envia el senyal d'aturada + + + <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> + <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à este esdeveniment i realitzarà un procediment de tancament net. Esta és una manera recomanada de tancar la màquina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat d'alçar les seues dades i estat.</p> +<p>Si la màquina no respon a esta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En este cas, seleccioneu l'acció <b>Atura la màquina</b> per aturar l'execució de la màquina virtual.</p> + + + <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> + <p>Atura la màquina virtual.</p> +<p>Tingueu en compte que esta 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 esta acció si la màquina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p> + + + <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> + <p>Quan estiga 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> + + + <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> + <p>Alça 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Ï esta màquina, es restaurarà des de l'estat alçat i continuarà l'execució des del mateix lloc en què l'heu alçat, cosa que permetrà continuar immediatament amb el vostre treball.</p><p>Tingueu en compte que l'operació d'alçar 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> + + + <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> + <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à este esdeveniment i realitzarà un procediment de tancament net. Esta és una manera recomanada de tancar la màquina virtual perquè totes les aplicacions que s'estan executant en ella tindran la possibilitat d'alçar les seues dades i estat.</p><p>Si la màquina no respon a esta acció potser el sistema operatiu client pot estar mal configurat o no entén els events del botó ACPI Power. En este cas, seleccioneu l'acció <b>Atura la màquina</b> per aturar l'execució de la màquina virtual.</p> + + + <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> + <p>Atura la màquina virtual.</p><p>Tingueu en compte que esta 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 esta acció si la màquina virtual no respon a l'acció <b>Envia el senyal d'aturada</b>.</p> + + + Restore the machine state stored in the current snapshot + Restaura l'estat de la màquina emmagatzemat a la captura actual + + + &Restore current snapshot '%1' + &Restaura la captura actual '%1' + + + + VBoxConsoleWnd + + VirtualBox OSE + VirtualBox OSE + + + innotek VirtualBox + innotek VirtualBox + + + &Fullscreen Mode + Mode de pantalla &completa + + + Switch to fullscreen mode + Canvia al mode de pantalla completa + + + Mouse Integration + enable/disable... + Integració del punter + + + Auto-resize Guest Display + enable/disable... + Redimensiona automàticament la pantalla del client + + + Auto-resize &Guest Display + Re&dimensiona automàticament la pantalla del client + + + Automatically resize the guest display when the window is resized (requires Guest Additions) + Redimensiona automàticament la pantalla del client en canviar la mida de la finestra (requereix les Guest Additions) + + + &Adjust Window Size + Ajusta la mida de la &finestra + + + Adjust window size and position to best fit the guest display + Ajusta la mida i la posició de la finestra per adaptar-se millor a la pantalla del client + + + &Insert Ctrl-Alt-Del + &Insereix Ctrl+Alt+Supr + + + Send the Ctrl-Alt-Del sequence to the virtual machine + Envia la seqüència Ctrl+Alt+Supr a la màquina virtual + + + &Insert Ctrl-Alt-Backspace + &Insereix Ctrl+Alt+Retrocés + + + Send the Ctrl-Alt-Backspace sequence to the virtual machine + Envia la seqüència Ctrl+Alt+Retrocés a la màquina virtua + + + &Reset + &Reinicia + + + Reset the virtual machine + Reinicia la màquina virtual + + + ACPI S&hutdown + At&urada ACPI + + + Send the ACPI Power Button press event to the virtual machine + Envia a la màquina virtual l'esdeveniment de prémer el botó ACPI Power + + + &Close... + &Tanca... + + + Close the virtual machine + Tanca la màquina virtual + + + Take &Snapshot... + Fe&s una captura... + + + Take a snapshot of the virtual machine + Fes una captura de la màquina virtual + + + &Floppy Image... + Imatge de &disquet... + + + Mount a floppy image file + Munta un fitxer d'imatge de disquet + + + Unmount F&loppy + Desmunta el dis&quet + + + Unmount the currently mounted floppy media + Desmunta el suport que està muntat actualment en el disquet + + + &CD/DVD-ROM Image... + Imatge de &CD/DVD... + + + Mount a CD/DVD-ROM image file + Munta un fitxer d'imatge de CD/DVD + + + Unmount C&D/DVD-ROM + Desmunta el C&D/DVD + + + Unmount the currently mounted CD/DVD-ROM media + Desmunta el suport que està muntat actualment en el CD/DVD + + + Remote Desktop (RDP) Server + enable/disable... + Servidor d'escriptori remot (RDP) + + + Remote Dis&play + &Pantalla remota + + + Enable or disable remote desktop (RDP) connections to this machine + Habilita o inhabilita les connexions d'escriptori remot (RDP) a esta màquina + + + &Shared Folders... + &Carpetes compartides... + + + Create or modify shared folders + Obri el diàleg per operar amb les carpetes compartides + + + &Install Guest Additions... + &Instal·la les Guest Additions... + + + Mount the Guest Additions installation image + Munta la imatge d'instal·lació de les Guest Additions + + + &Statistics... + E&stadístiques... + + + &Command line... + &Línia d'ordes... + + + &VirtualBox Web Site... + Lloc web de &VirtualBox... + + + Open the browser and go to the VirtualBox product web site + Obri el navegador i ves al lloc web del producte VirtualBox + + + &About VirtualBox... + &Quant a VirtualBox... + + + Show a dialog with product information + Mostra un diàleg amb la informació del producte + + + &Reset All Warnings + &Reinicia tots els avisos + + + Go back to showing all suppressed warnings and messages + Fa que tots els avisos i missatges suprimits es mostren una altra vegada + + + Mount &Floppy + Munta el &disquet + + + Mount &CD/DVD-ROM + Munta el &CD/DVD + + + &USB Devices + Dispositius &USB + + + &Devices + &Dispositius + + + De&bug + De&puració + + + &Help + &Ajuda + + + 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. + 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 esta funció requereix tindre les Guest Additions instal·lades en el sistema operatiu client. + + + 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. + 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 tindre instal·lades les Guest Additions en el sistema operatiu client. + + + 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. + Mostra la tecla assignada a l'amfitrió.<br>Quan es prem esta 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. + + + <hr>The VRDP Server is listening on port %1 + <hr>El servidor VRDP està escoltant el port %1 + + + <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> + <qt>Indica l'estat de les característiques de virtualització per maquinari utilitzades per esta màquina:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr></qt> + + + &Pause + &Pausa + + + Suspend the execution of the virtual machine + Suspèn l'execució de la màquina virtual + + + R&esume + R&eprèn + + + Resume the execution of the virtual machine + Reprén l'execució de la màquina virtual + + + Disable &Mouse Integration + Desactiva la integració del &punter + + + Temporarily disable host mouse pointer integration + Desactiva temporalment la integració del punter de l'amfitrió + + + Enable &Mouse Integration + Activa la integració del &punter + + + Enable temporarily disabled host mouse pointer integration + Activa la integració del punter de l'amfitrió que s'havia desactivat temporalment + + + Snapshot %1 + Captura %1 + + + Host Drive + Unitat de l'ordinador amfitrió + + + &Machine + &Màquina + + + &Network Adapters + Adaptadors de &xarxa + + + Adapter %1 + network + Adaptador %1 + + + Mount the selected physical drive of the host PC + Floppy tip + Munta la unitat física de l'ordinador amfitrió seleccionada + + + Sun VirtualBox + Sun VirtualBox + + + Mount the selected physical drive of the host PC + CD/DVD tip + Munta la unitat física de l'ordinador amfitrió seleccionada + + + Disconnect the cable from the selected virtual network adapter + Desconnecta el cable de l'adaptador virtual de xarxa seleccionat + + + Connect the cable to the selected virtual network adapter + Connecta el cable de l'adaptador virtual de xarxa seleccionat + + + Seam&less Mode + Mode f&luid + + + Switch to seamless desktop integration mode + Canvia al mode d'integració de l'escriptori fluid + + + Indicates whether the keyboard is captured by the guest OS (<img src=hostkey_captured_16px.png/>) or not (<img src=hostkey_16px.png/>). + Indica si el teclat és capturat pel sistema operatiu client (<img src=hostkey_captured_16px.png/>) o no (<img src=hostkey_16px.png/>). + + + <qt><nobr>Indicates the activity of the floppy media:</nobr>%1</qt> + Floppy tooltip + <qt><nobr>Indica l'activitat del disquet:</nobr>%1</qt> + + + <br><nobr><b>Host Drive</b>: %1</nobr> + Floppy tooltip + <br><nobr><b>Unitat de l'amfitrió</b>: %1</nobr> + + + <br><nobr><b>Image</b>: %1</nobr> + Floppy tooltip + <br><nobr><b>Imatge</b>: %1</nobr> + + + <br><nobr><b>No media mounted</b></nobr> + Floppy tooltip + <br><nobr><b>No hi ha cap suport muntat</b></nobr> + + + <qt><nobr>Indicates the activity of the CD/DVD-ROM media:</nobr>%1</qt> + DVD-ROM tooltip + <qt><nobr>Indica l'activitat del CD/DVD:</nobr>%1</qt> + + + <br><nobr><b>Host Drive</b>: %1</nobr> + DVD-ROM tooltip + <br><nobr><b>Unitat de l'amfitrió</b>: %1</nobr> + + + <br><nobr><b>Image</b>: %1</nobr> + DVD-ROM tooltip + <br><nobr><b>Imatge</b>: %1</nobr> + + + <br><nobr><b>No media mounted</b></nobr> + DVD-ROM tooltip + <br><nobr><b>No hi ha cap suport muntat</b></nobr> + + + <qt><nobr>Indicates activity on the the virtual hard disks:</nobr>%1</qt> + HDD tooltip + <qt><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</qt> + + + <br><nobr><b>No hard disks attached</b></nobr> + HDD tooltip + <br><nobr><b>No hi ha cap disc dur connectat</b></nobr> + + + <qt><nobr>Indicates the activity of the network interfaces:</nobr>%1</qt> + Network adapters tooltip + <qt><nobr>Indica l'activitat de les interfícies de xarxa:</nobr>%1</qt> + + + <br><nobr><b>Adapter %1 (%2)</b>: cable %3</nobr> + Network adapters tooltip + <br><nobr><b>Adaptador %1 (%2)</b>: el fil està %3</nobr> + + + connected + Network adapters tooltip + connectat + + + disconnected + Network adapters tooltip + desconnectat + + + <br><nobr><b>All network adapters are disabled</b></nobr> + Network adapters tooltip + <br><nobr><b>Tots els adaptadors de xarxa estan desactivats</b></nobr> + + + <qt><nobr>Indicates the activity of the attached USB devices:</nobr>%1</qt> + USB device tooltip + <qt><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</qt> + + + <br><nobr><b>No USB devices attached</b></nobr> + USB device tooltip + <br><nobr><b>No hi ha dispositius USB connectats</b></nobr> + + + <br><nobr><b>USB Controller is disabled</b></nobr> + USB device tooltip + <br><nobr><b>El controlador USB està desactivat</b></nobr> + + + Indicates whether the Remote Display (VRDP Server) is enabled (<img src=vrdp_16px.png/>) or not (<img src=vrdp_disabled_16px.png/>). + Indica si la pantalla remota (servidor VRDP) està activada (<img src=vrdp_16px.png/>) o no (<img src=vrdp_disabled_16px.png/>). + + + <qt><nobr>Indicates the activity of the machineof the machine'sapos;s shared folders: shared folders:</nobr>%1</qt> + Shared folders tooltip + <qt><nobr>Indica l'activitat de les carpetes compartides:</nobr>%1</qt> + + + <br><nobr><b>No shared folders</b></nobr> + Shared folders tooltip + <br><nobr><b>No hi ha carpetes compartides</b></nobr> + + + &Contents... + &Continguts... + + + F1 + F1 + + + Show the online help contents + Mostra els continguts de l'ajuda en línia + + + R&egister VirtualBox... + R&egistreu-vos al VirtualBox... + + + Open VirtualBox registration form + Obri el formulari de registre del VirtualBox + + + Session I&nformation Dialog + D&iàleg informatiu de la sessió + + + Show Session Information Dialog + Mostra el diàleg informatiu de la sessió + + + &Statistics... + debug action + E&stadístiques... + + + &Command Line... + debug action + &Línia d'ordes... + + + 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. + 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 esta funció requereix tindre les Guest Additions instal·lades en el sistema operatiu client. + + + 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. + 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 tindre instal·lades les Guest Additions en el sistema operatiu client. + + + Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>). + Indica si el teclat és capturat pel sistema operatiu client (<img src=hostkey_captured_16px.png/>) o no (<img src=hostkey_16px.png/>). + + + Indicates whether the Remote Display (VRDP Server) is enabled (<img src=:/vrdp_16px.png/>) or not (<img src=:/vrdp_disabled_16px.png/>). + Indica si la pantalla remota (servidor VRDP) està activada (<img src=vrdp_16px.png/>) o no (<img src=vrdp_disabled_16px.png/>). + + + &Logging... + debug action + &S'està connectant... + + + 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. + Mostra la tecla assignada a l'amfitrió.<br>Quan es prem esta 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. + + + 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> + Virtualization Stuff LED + Indica l'estat de les característiques de virtualització de maquinari que fa servir esta màquina virtual:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr> + + + <br><nobr><b>%1:</b>&nbsp;%2</nobr> + Virtualization Stuff LED + <br><nobr><b>%1:</b>&nbsp;%2</nobr> + + + EXPERIMENTAL build %1r%2 - %3 + Versió EXPERIMENTAL %1r%2 - %3 + + + &CD/DVD Devices + Dispositius &CD/DVD + + + &Floppy Devices + Dis&queteres + + + &Network Adapters... + Adaptadors de &xarxa... + + + Change the settings of network adapters + Canvia els paràmetres dels adaptadors de xarxa + + + &Remote Display + Pantalla &remota + + + More CD/DVD Images... + Més imatges de CD/DVD... + + + Unmount CD/DVD Device + Desmunta el CD/DVD + + + More Floppy Images... + Més imatges de disquet... + + + Unmount Floppy Device + Desmunta la disquetera + + + No CD/DVD Devices Attached + No s'ha conectat cap dispositiu de CD/DVD + + + No Floppy Devices Attached + No s'ha connectat cap dispositiu de disquetera + + + <p style='white-space:pre'><nobr>Indicates the activity of the virtual hard disks:</nobr>%1</p> + HDD tooltip + <p style='white-space:pre'><nobr>Indica l'activitat dels discos durs virtuals:</nobr>%1</p> + + + <p style='white-space:pre'><nobr>Indicates the activity of the CD/DVD devices:</nobr>%1</p> + CD/DVD tooltip + <p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de CD/DVD:</nobr>%1</p> + + + <br><nobr><b>No CD/DVD devices attached</b></nobr> + CD/DVD tooltip + <br><nobr><b>No s'ha connectat cap dispositiu de CD/DVD</b></nobr> + + + <p style='white-space:pre'><nobr>Indicates the activity of the floppy devices:</nobr>%1</p> + FD tooltip + <p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de disquetera:</nobr>%1</p> + + + <br><nobr><b>No floppy devices attached</b></nobr> + FD tooltip + <br><nobr><b>No s'ha connectat cap dispositiu de disquetera</b></nobr> + + + <p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p> + Network adapters tooltip + <p style='white-space:pre'><nobr>Indica l'activitat dels dispositius de xarxa:</nobr>%1</p> + + + <p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p> + USB device tooltip + <p style='white-space:pre'><nobr>Indica l'activitat dels dispositius USB connectats:</nobr>%1</p> + + + <p style='white-space:pre'><nobr>Indicates the activity of the machine's shared folders:</nobr>%1</p> + Shared folders tooltip + <p style='white-space:pre'><nobr>Indica l'activitat de les carpetes compartides per la màquina virtual:</nobr>%1</p> + + + + VBoxDiskImageManagerDlg + + Name + Nom + + + Virtual Size + Mida virtual + + + Actual Size + Mida actual + + + Size + Mida + + + Virtual Disk Manager + Gestor de discos virtuals + + + &Hard Disks + &Discos durs + + + &CD/DVD Images + Imatges de &CD/DVD + + + &Floppy Images + Imatges de dis&quet + + + Help + Ajuda + + + F1 + F1 + + + Invoke dialog's help + Invoca l'ajuda del diàleg + + + &OK + &D'acord + + + Accept dialog + Accepta el diàleg + + + Cancel + Cancel·la + + + Cancel dialog + Cancel·la el diàleg + + + -- + no info + -- + + + &New... + &Nova... + + + &Add... + &Afig... + + + R&emove + &Elimina + + + Re&lease + A&llibera + + + Re&fresh + Re&fresca + + + New + Nova + + + Add + Afig + + + Remove + Elimina + + + Release + Allibera + + + Refresh + Refresca + + + Ctrl+N + Ctrl+N + + + Ctrl+A + Ctrl+A + + + Ctrl+D + Ctrl+D + + + Ctrl+L + Ctrl+L + + + Ctrl+R + Ctrl+R + + + &Actions + &Accions + + + Location + Ubicació + + + Disk Type + Tipus de disc + + + Storage Type + Tipus d'emmagatzematge + + + Attached to + Connectat a + + + Snapshot + Captura + + + Checking accessibility + S'està comprovant l'accessibilitat + + + <nobr><b>%1</b></nobr><br>Checking accessibility... + HDD + <nobr><b>%1</b></nobr><br>S'està comprovant l'accessibilitat... + + + <nobr><b>%1</b></nobr><br><nobr>Disk type:&nbsp;&nbsp;%2</nobr><br><nobr>Storage type:&nbsp;&nbsp;%3</nobr> + <nobr><b>%1</b></nobr><br><nobr>Tipus del disc:&nbsp;&nbsp;%2</nobr><br><nobr>Tipus d'emmagatzematge:&nbsp;&nbsp;%3</nobr> + + + <br><nobr>Attached to:&nbsp;&nbsp;%1</nobr> + HDD + <br><nobr>Connectat a:&nbsp;&nbsp;%1</nobr> + + + <br><nobr>Snapshot:&nbsp;&nbsp;%5</nobr> + HDD + <br><nobr>Captura:&nbsp;&nbsp;%5</nobr> + + + <nobr><b>%1</b></nobr><br>Error checking media accessibility + HDD + <nobr><b>%1</b></nobr><br>S'ha produït un error quan s'estava comprovant l'accessibilitat als suports + + + <nobr><b>%1</b></nobr><br>%2 + HDD + <nobr><b>%1</b></nobr><br>%2 + + + <nobr><b>%1</b></nobr><br>Checking accessibility... + CD/DVD/Floppy + <nobr><b>%1</b></nobr><br>S'està comprovant l'accessibilitat... + + + <nobr><b>%1</b></nobr> + CD/DVD/Floppy + <nobr><b>%1</b></nobr> + + + <br><nobr>Attached to:&nbsp;&nbsp;%1</nobr> + CD/DVD/Floppy + <br><nobr>Connectat a:&nbsp;&nbsp;%1</nobr> + + + <nobr><b>%1</b></nobr><br>Error checking media accessibility + CD/DVD/Floppy + <nobr><b>%1</b></nobr><br>S'ha produït un error quan s'estava comprovant l'accessibilitat als suports + + + <nobr><b>%1</b></nobr><br>%2 + <nobr><b>%1</b></nobr><br>%2 + + + The image file is not accessible + CD/DVD/Floppy + No es pot accedir al fitxer d'imatge + + + &Select + &Selecciona + + + All hard disk images (*.vdi; *.vmdk);;Virtual Disk images (*.vdi);;VMDK images (*.vmdk);;All files (*) + Totes les imatges de discos durs (*.vdi; *.vmdk);;Imatges de disc virtual (*.vdi);;Imatges VMDK (*.vmdk);;Tots els fitxers (*) + + + Select a hard disk image file + Seleccioneu un fitxer d'imatge de disc dur + + + Select a CD/DVD-ROM disk image file + Seleccioneu un fitxer d'imatge de disc CD/DVD-ROM + + + Select a floppy disk image file + Seleccioneu un fitxer d'imatge de disquet + + + Create a new virtual hard disk + Crea un disc dur virtual nou + + + Add (register) an existing image file + Afig (registra) un fitxer d'imatge existent + + + Remove (unregister) the selected media + Elimina (suprimetix del registre) els suports seleccionats + + + Release the selected media by detaching it from the machine + Allibera els suports seleccionats desconnectant-los de la màquina + + + Refresh the media list + Refresca la llista de suports + + + CD/DVD-ROM images (*.iso);;All files (*) + Imatges de CD/DVD-ROM (*.iso);;Tots els fitxers (*) + + + Floppy images (*.img);;All files (*) + Imatges de disquet (*.img);;Tots els fitxers (*) + + + All hard disk images (*.vdi *.vmdk *.vhd);;Virtual Disk images (*.vdi);;VMDK images (*.vmdk);;VHD images (*.vhd);;All files (*) + Totes les imatges de discos durs (*.vdi; *.vmdk);;Imatges de disc virtual (*.vdi);;Imatges VMDK (*.vmdk);;Imatges VHD (*.vhd);;Tots els fitxers (*) + + + Hard &Disks + &Discos durs + + + <nobr>Location:</nobr> + <nobr>Localitzacio:</nobr> + + + <nobr>Disk Type:</nobr> + <nobr>Tipus de Disc:</nobr> + + + <nobr>&nbsp;&nbsp;Storage Type:</nobr> + <nobr>&nbsp;&nbsp;Tipus d'emmagatzematge:</nobr> + + + <nobr>Attached to:</nobr> + <nobr>Connectat a:</nobr> + + + <nobr>&nbsp;&nbsp;Snapshot:</nobr> + <nobr>&nbsp;&nbsp;Captura:</nobr> + + + + VBoxDownloaderWgt + + Cancel + Cancel·la + + + Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr> + S'està baixant la imatge del CD de les Guest Additions del VirtualBox des de <nobr><b>%1</b>...</nobr> + + + Cancel the VirtualBox Guest Additions CD image download + Cancel·la la descàrrega de la imatge del CD de les Guest Additions del VirtualBox + + + Could not locate the file on the server (response: %1). + No es pot localitzar el fitxer al servidor (resposta: %1). + + + <p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p> + <p>Hi ha hagut un error mentre es desava el fitxer descarregat com a <nobr><b>%1</b>.</nobr></p> + + + Select folder to save Guest Additions image to + Seleccioneu la carpeta on alçar la imatge de les Guest Additions + + + Connection timed out. + S'ha excedit el temps d'espera de la connexió. + + + The download process has been cancelled by the user. + L'usuari ha cancel·lat el procés de baixada. + + + + VBoxEmptyFileSelector + + &Choose... + &Trieu... + + + + VBoxExportApplianceWzd + + Select a file to export into + Seleccioneu un fitxer al qual s'exportarà + + + Open Virtualization Format (%1) + Format virtual obert (%1) + + + Appliance + Aplicació virtual + + + Exporting Appliance ... + S'està exportant l'aplicació virtual... + + + Appliance Export Wizard + Assistent d'exportació d'aplicació virtuals + + + Welcome to the Appliance Export Wizard! + Benvingut a l'assistent d'exportació d'aplicacions virtuals! + + + <!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> + <!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;">Este assitent vos 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;">Arrere</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 estes màquines han d'estar aturades per tal que puguen importar-se.</p></body></html> + + + < &Back + < &Arrere + + + &Next > + &Següent > + + + Cancel + Cancel·la + + + Appliance Export Settings + Paràmetres d'exportació de l'aplicació virtual + + + 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. + Ací podeu canviar valors adicionals de la configuració de les màquines virtuals seleccionades. Podeu modificar la majoria de les propietats mostrades fent doble clic sobre els ítems. + + + Restore Defaults + Restaura els paràmetres per defecte + + + Please specify a filename into which the appliance information will be written. Currently VirtualBox supports the Open Virtualization Format (OVF). + 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). + + + Write in legacy OVF 0.9 format for compatibility with other virtualization products. + Escriu en format OVF 0.9 original per ser compatible amb altres productes de virtualització. + + + &Write legacy OVF 0.9 + &Escriu en format OVF 0.9 original + + + &Export > + &Exporta > + + + Please choose a filename to export the OVF to. + Seleccioneu un nom de fitxer al qual exportar l'OVF. + + + Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target. + 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. + + + Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target. + 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. + + + Checking files ... + S'estan comprovant els fitxers... + + + Removing files ... + S'estan eliminant els fitxers... + + + 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. + 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. + + + &Local Filesystem + Sistema de fitxers &local + + + Sun &Cloud + Sun &Cloud + + + &Simple Storage System (S3) + &Sistema d'emmagatzematge simple (S3) + + + &Username: + Nom d'&usuari: + + + &Password: + &Contrasenya: + + + &File: + &Fitxer: + + + &Bucket: + &Contenidor: + + + &Hostname: + &Nom de l'amfitrió: + + + + VBoxFilePathSelectorWidget + + <reset to default> + <reset to default> + + + The actual default path value will be displayed after accepting the changes and opening this dialog again. + La ruta actual per defecte es mostrarà després d'acceptar els canvis i obrir este diàleg novament. + + + <not selected> + <no seleccionat> + + + Please use the <b>Other...</b> item from the drop-down list to select a path. + Feu servir l'ítem <b>Altra...</b> a la llista desplegable per a seleccionar la ruta desitjada. + + + Other... + Altra... + + + Reset + Reinicialitza + + + Opens a dialog to select a different folder. + Obri un quadre de diàleg per a seleccionar una carpeta diferent. + + + Resets the folder path to the default value. + Reinicialitza la ruta de la carpeta al valor per defecte. + + + Opens a dialog to select a different file. + Obri un quadre de diàleg per a seleccionar un fitxer diferent. + + + Resets the file path to the default value. + Reinicialitza la ruta al fitxer al valor per defecte. + + + &Copy + &Copia + + + Please type the folder path here. + Introduïu ací la ruta desitjada per a la carpeta. + + + Please type the file path here. + Introduïu ací la ruta desitjada per al fitxer. + + + + VBoxGLSettingsDlg + + General + General + + + Input + Entrada + + + Update + Actualització + + + Language + Idioma + + + USB + USB + + + Network + Xarxa + + + VirtualBox - %1 + VirtualBox - %1 + + + + VBoxGLSettingsGeneral + + 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. + Mostra la ruta cap a la carpeta de fitxers VDI predeterminada. S'usa esta carpeta, si no se n'especifica explícitament una altra, quan s'afig o es crea un disc virtual. + + + Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines. + Mostra la ruta cap a la carpeta de màquines virtuals predeterminada. S'usa esta carpeta, si no se n'especifica explícitament una altra, quan es crea una màquina virtual. + + + Displays the path to the library that provides authentication for Remote Display (VRDP) clients. + Mostra la ruta cap a la biblioteca que proveeix l'autenticació per a clients de la pantalla remota (VRDP). + + + Default &Hard Disk Folder: + Carpeta de &disc dur per defecte: + + + Default &Machine Folder: + Carpeta de la &màquina per defecte: + + + V&RDP Authentication Library: + Biblioteca d'autenticació V&RDP: + + + When checked, the Dock Icon will reflect the VM window content in realtime. + Quan estiga marcat, la icona del dock mostrarà el contingut de la finestra de la màquina virtual en temps real. + + + &Dock Icon Realtime Preview + Previsualització en temps real a la icona del &dock + + + 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. + Mostra la ruta cap a la carpeta de disc dur predeterminada. S'usa esta carpeta, si no se n'especifica explícitament una altra, quan s'afig o es crea un disc virtual. + + + When checked, the application will provide an icon with the context menu in the system tray. + Quan estiga marcat, l'aplicació proveirà una icona amb el menú de context a la safata de sistema. + + + &Show System Tray Icon + &Mostra la icona a la safata del sistema + + + &Auto show Dock && Menubar in fullscreen + &Mostra el dock automàticament i la barra de menú al mode de pantalla completa + + + + VBoxGLSettingsInput + + Host &Key: + Tecla d'&amfitrió: + + + 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. + 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ó. + + + 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. + Quan estiga marcat, 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. + + + &Auto Capture Keyboard + &Auto-captura el teclat + + + + VBoxGLSettingsLanguage + + (built-in) + Language + (integrat) + + + <unavailable> + Language + <no disponible> + + + <unknown> + Author(s) + <desconegut> + + + Default + Language + Predeterminat + + + Language: + Idioma: + + + &Interface Language: + Idioma de la &interfície: + + + 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. + 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. + + + Name + Nom + + + Id + Id + + + Language + Idioma + + + Author + Autor + + + Author(s): + Autor(s): + + + + VBoxGLSettingsNetwork + + %1 network + <adapter name> network + %1 xarxa + + + host IPv4 address of <b>%1</b> is wrong + l'adreça IPv4 de l'amfitrió de <b>%1</b> és errònia + + + host IPv4 network mask of <b>%1</b> is wrong + la màscara de xarxa IPv4 de l'amfitrió <b>%1</b> és errònia + + + host IPv6 address of <b>%1</b> is wrong + l'adreça IPv6 de l'amfitrió de <b>%1</b> és errònia + + + DHCP server address of <b>%1</b> is wrong + l'adreça del servidor DHCP de <b>%1</b> és errònia + + + DHCP server network mask of <b>%1</b> is wrong + la màscara de xarxa del servidor DHCP de <b>%1</b> és errònia + + + DHCP lower address bound of <b>%1</b> is wrong + el límit inferior de l'adreça DHCP de <b>%1</b> és erroni + + + DHCP upper address bound of <b>%1</b> is wrong + el límit superior de l'adreça DHCP de <b>%1</b> és erroni + + + Adapter + Adaptador + + + Automatically configured + interface + Configurat automàticament + + + Manually configured + interface + Configurat manualment + + + IPv4 Address + Adreça IPv4 + + + Not set + address + Sense especificar + + + IPv4 Network Mask + Màscara de xarxa IPv4 + + + Not set + mask + Sense especificar + + + IPv6 Address + Adreça IPv6 + + + IPv6 Network Mask Length + Mida de la màscara de xarxa IPv6 + + + Not set + length + Sense especificar + + + DHCP Server + Servidor DHCP + + + Enabled + server + Activat + + + Disabled + server + Desactivat + + + Address + Adreça + + + Network Mask + Màscara de xarxa + + + Lower Bound + Límit inferior + + + Not set + bound + Sense especificar + + + Upper Bound + Límit superior + + + &Add host-only network + &Afig xarxa només per a l'amfitrió + + + &Remove host-only network + &Suprimeix xarxa només per a l'amfitrió + + + &Edit host-only network + &Edita xarxa només per a l'amfitrió + + + Performing + creating/removing host-only network + S'estan realitzant les operacions + + + &Host-only Networks: + &Xarxes només de l'amfitrió: + + + Lists all available host-only networks. + Mostra totes les xarxes només de l'amfitrió. + + + Name + Nom + + + + VBoxGLSettingsNetworkDetails + + Host-only Network Details + Detalls de xarxa de només l'amfitrió + + + &Adapter + &Adaptador + + + Manual &Configuration + &Configuració manual + + + Use manual configuration for this host-only network adapter. + Fes servir la configuració manual només per a l'adaptador de xarxa de l'amfitrió. + + + &IPv4 Address: + Adreça &IPv4: + + + Displays the host IPv4 address for this adapter. + Mostra l'adreça IPv4 de l'amfitrió d'este adaptador. + + + IPv4 Network &Mask: + &Màscara de xarxa IPv4: + + + Displays the host IPv4 network mask for this adapter. + Mostra la màscara de xarxa IPv4 de l'amfitrió d'este adaptador. + + + I&Pv6 Address: + Adreça I&Pv6: + + + Displays the host IPv6 address for this adapter if IPv6 is supported. + Mostra l'adreça IPv6 de l'amfitrió d'este adaptador si IPv6 està suportat. + + + IPv6 Network Mask &Length: + &Longitud de la màscara de xarxa IPv6: + + + Displays the host IPv6 network mask prefix length for this adapter if IPv6 is supported. + Mostra la longitud de l'adreça de la màscara de xarxa IPv6 de l'amfitrió per a este adaptador si IPv6 està suportat. + + + &DHCP Server + Servidor &DHCP + + + &Enable Server + &Habilita el servidor + + + Indicates whether the DHCP Server is enabled on machine startup or not. + Indica si el servidor DHCP està habilitat en iniciar de la màquina o no. + + + Server Add&ress: + Ad&reça del servidor: + + + Displays the address of the DHCP server servicing the network associated with this host-only adapter. + Mostra l'adreça del servidor DHCP de la xarxa associada a este adaptador de només l'amfitrió. + + + Server &Mask: + &Màscara del servidor: + + + Displays the network mask of the DHCP server servicing the network associated with this host-only adapter. + Mostra la màscara de xarxa del servidor DHCP de la xarxa associada a este adaptador de només l'amfitrió. + + + &Lower Address Bound: + Adreça límit &inferior: + + + Displays the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter. + Mostra l'adreça límit inferior oferida pel servidor DHCP de la xarxa associada aquet adaptador de només l'amfitrió. + + + &Upper Address Bound: + Adreça límit &superior: + + + Displays the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter. + Mostra l'adreça límit superior oferida pel servidor DHCP de la xarxa associada a este adaptador de només l'amfitrió. + + + + VBoxGLSettingsUpdate + + When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available. + Quan estiga marcat, l'aplicació es connectarà periòdicament al web del VirtualBox per comprovar si hi ha noves versions disponibles. + + + &Check for updates + &Comprova si hi ha actualitzacions + + + &Once per: + &Una vegada per: + + + Specifies how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box. + Especifica amb quina periodicitat es comprovarà si hi ha noves versions. Si voleu desactivar esta acció, desmarqueu la casella de dalt. + + + Next Check: + Propera comprovació: + + + Check for: + Comprova per: + + + <p>Choose this if you only wish to be notified about stable updates to VirtualBox.</p> + <p>Trieu això si voleu ser notificats sobre actualitzacions estables del VirtualBox.</p> + + + &Stable release versions + &Versions publicades estables + + + <p>Choose this if you wish to be notified about all new VirtualBox releases.</p> + <p>Trieu això si voleu ser informats de noves versions publicades del VirtualBox.</p> + + + &All new releases + &Totes les noves versions + + + <p>Choose this to be notified about all new VirtualBox releases and pre-release versions of VirtualBox.</p> + <p>Trieu això si voleu ser notificats de les noves versions i versions en desenvolupament del VirtualBox.</p> + + + All new releases and &pre-releases + Totes les &noves versions i també versions en desenvolupament + + + + VBoxGlobal + + Differencing + hard disk + S'estan calculant les diferències + + + Unknown device %1:%2 + USB device details + Dispositiu desconegut %1:%2 + + + <nobr>Vendor ID: %1</nobr><br><nobr>Product ID: %2</nobr><br><nobr>Revision: %3</nobr> + USB device tooltip + <nobr>ID del proveïdor: %1</nobr><br><nobr>ID del producte: %2</nobr><br><nobr>Revisió: %3</nobr> + + + <br><nobr>Serial No. %1</nobr> + USB device tooltip + <br><nobr>Núm de sèrie %1</nobr> + + + <br><nobr>State: %1</nobr> + USB device tooltip + <br><nobr>Estat: %1</nobr> + + + Name + details report + Nom + + + OS Type + details report + Tipus de sistema operatiu + + + Base Memory + details report + Memòria base + + + <nobr>%3 MB</nobr> + details report + <nobr>%3 MB</nobr> + + + General + details report + General + + + Video Memory + details report + Memòria de vídeo + + + <nobr>%4 MB</nobr> + details report + <nobr>%4 MB</nobr> + + + Boot Order + details report + Orde d'arrencada + + + ACPI + details report + ACPI + + + IO APIC + details report + IO APIC + + + Nested Paging + details report + Paginació imbricada + + + Not Attached + details report (HDDs) + No està connectat + + + Hard Disks + details report + Discos durs + + + Enabled + details report (ACPI) + Activat + + + Disabled + details report (ACPI) + Desactivat + + + Enabled + details report (IO APIC) + Activat + + + Disabled + details report (IO APIC) + Desactivat + + + Enabled + details report (Nested Paging) + Activat + + + Disabled + details report (Nested Paging) + Desactivat + + + Not mounted + details report (floppy) + No està muntat + + + Image + details report (floppy) + Imatge + + + Host Drive + details report (floppy) + Unitat de l'ordinador amfitrió + + + Floppy + details report + Disquet + + + Bridged Adapter + NetworkAttachmentType + Adaptador pont + + + Not mounted + details report (DVD) + No està muntat + + + Image + details report (DVD) + Imatge + + + Host Drive + details report (DVD) + Unitat de l'ordinador amfitrió + + + CD/DVD-ROM + details report + CD/DVD + + + Adapter + details report (audio) + Adaptador + + + Disabled + details report (audio) + Desactivat + + + Audio + details report + Àudio + + + Bridged adapter, %1 + details report (network) + Adaptador pont, %1 + + + Host-only adapter, '%1' + details report (network) + Adaptador de només l'amfitrió, '%1' + + + Adapter %1 + details report (network) + Adaptador %1 + + + Disabled + details report (network) + Desactivat + + + Network + details report + Xarxa + + + Device Filters + details report (USB) + Filtres del dispositiu + + + %1 (%2 active) + details report (USB) + %1 (%2 actiu) + + + Disabled + details report (USB) + Desactivat + + + VRDP Server Port + details report (VRDP) + Port del servidor VRDP + + + %1 + details report (VRDP) + %1 + + + Disabled + details report (VRDP) + Desactivat + + + Remote Display + details report + Pantalla remota + + + Opening URLs is not implemented yet. + Encara no està implementada l'opció d'obrir URL. + + + Powered Off + MachineState + Aturada + + + Saved + MachineState + Alçat + + + Aborted + MachineState + Interromput + + + Running + MachineState + S'està executant + + + Paused + MachineState + Pausat + + + Starting + MachineState + S'està iniciant + + + Stopping + MachineState + S'està aturant + + + Saving + MachineState + S'està desant + + + Restoring + MachineState + S'està restaurant + + + Discarding + MachineState + S'està descartant + + + Closed + SessionState + Tancat + + + Open + SessionState + Obert + + + Spawning + SessionState + S'està engendrant + + + Closing + SessionState + S'està tancant + + + None + DeviceType + Cap + + + Floppy + DeviceType + Disquet + + + CD/DVD-ROM + DeviceType + CD/DVD + + + Hard Disk + DeviceType + Disc dur + + + Network + DeviceType + Xarxa + + + Primary + DiskControllerType + Primari + + + Secondary + DiskControllerType + Secundari + + + Normal + DiskType + Normal + + + Immutable + DiskType + Immutable + + + Writethrough + DiskType + Escriptura directa + + + Virtual Disk Image + DiskStorageType + Imatge de disc virtual + + + iSCSI + DiskStorageType + iSCSI + + + VMDK Image + DiskStorageType + Imatge VMDK + + + Null + VRDPAuthType + Nul + + + External + VRDPAuthType + Extern + + + Guest + VRDPAuthType + Client + + + Ignore + USBFilterActionType + Ignora + + + Hold + USBFilterActionType + Retèn + + + Master + DiskControllerDevice + Mestre + + + Slave + DiskControllerDevice + Esclau + + + Device&nbsp;%1 + DiskControllerDevice + Dispositiu&nbsp;%1 + + + Null Audio Driver + AudioDriverType + Controlador d'àudio nul + + + Windows Multimedia + AudioDriverType + Windows Multimedia + + + OSS Audio Driver + AudioDriverType + Controlador d'àudio OSS + + + ALSA Audio Driver + AudioDriverType + Controlador d'àudio ALSA + + + Windows DirectSound + AudioDriverType + Windows DirectSound + + + CoreAudio + AudioDriverType + CoreAudio + + + Intel PRO/1000 MT Server (82545EM) + NetworkAdapterType + Intel PRO/1000 MT Server (82545EM) + + + Not attached + NetworkAttachmentType + No connectat + + + NAT + NetworkAttachmentType + NAT + + + Host Interface + NetworkAttachmentType + Interfície de xarxa de l'amfitrió + + + Internal Network + NetworkAttachmentType + Xarxa interna + + + Host-only Adapter + NetworkAttachmentType + Adaptador de només l'amfitrió + + + Not supported + USBDeviceState + No compatible + + + Unavailable + USBDeviceState + No disponible + + + Busy + USBDeviceState + Ocupat + + + Available + USBDeviceState + Disponible + + + Held + USBDeviceState + Retingut + + + Captured + USBDeviceState + Capturat + + + <i>Checking...</i> + hard disk + <i>S'està comprovant...</i> + + + <i>Inaccessible</i> + hard disk + <i>Inaccessible</i> + + + Disabled + ClipboardType + Desactivat + + + Host To Guest + ClipboardType + De l'amfitrió al client + + + Guest To Host + ClipboardType + Del client a l'amfitrió + + + Bidirectional + ClipboardType + Bidireccional + + + Select a directory + Seleccioneu un directori + + + Select a file + Seleccioneu un fitxer + + + Port %1 + details report (serial ports) + Port %1 + + + Disabled + details report (serial ports) + Desactivat + + + Serial Ports + details report + Ports en sèrie + + + USB + details report + USB + + + Shared Folders + details report (shared folders) + Carpetes compartides + + + %1 + details report (shadef folders) + %1 + + + None + details report (shared folders) + Cap + + + Shared Folders + details report + Carpetes compartides + + + Stuck + MachineState + Encallada + + + Disconnected + PortMode + Desconnectat + + + Host Pipe + PortMode + Conducte cap a l'amfitrió + + + Host Device + PortMode + Dispositiu de l'amfitrió + + + Bridged Network + NetworkAttachmentType + Xarxa en pont + + + Host-only Network + NetworkAttachmentType + Xarxa només d'amfitrió + + + PIIX3 + StorageControllerType + PIIX3 + + + PIIX4 + StorageControllerType + PIIX4 + + + ICH6 + StorageControllerType + ICH6 + + + AHCI + StorageControllerType + AHCI + + + Lsilogic + StorageControllerType + Lsilogic + + + BusLogic + StorageControllerType + BusLogic + + + User-defined + serial port + Definit per l'usuari + + + Custom Hard Disk + DiskStorageType + Disc dur personalitzat + + + VT-x/AMD-V + details report + VT-x/AMD-V + + + PAE/NX + details report + PAE/NX + + + Enabled + details report (VT-x/AMD-V) + Activat + + + Disabled + details report (VT-x/AMD-V) + Desactivat + + + Enabled + details report (PAE/NX) + Activat + + + Disabled + details report (PAE/NX) + Desactivat + + + Host Driver + details report (audio) + Controlador amfitrió + + + Controller + details report (audio) + Controlador + + + Bridged network, %1 + details report (network) + Xarxa en pont, %1 + + + Internal network, '%1' + details report (network) + Xarxa interna, '%1' + + + Host-only network, '%1' + details report (network) + Xarxa només de l'amfitrió, '%1' + + + Port %1 + details report (parallel ports) + Port %1 + + + Disabled + details report (parallel ports) + Desactivat + + + Parallel Ports + details report + Ports paral·lels + + + USB + DeviceType + USB + + + Shared Folder + DeviceType + Carpeta compartida + + + IDE + StorageBus + IDE + + + SATA + StorageBus + SATA + + + SCSI + StorageBus + SCSI + + + Primary + StorageBusChannel + Primari + + + Secondary + StorageBusChannel + Secundari + + + Master + StorageBusDevice + Mestre + + + Slave + StorageBusDevice + Esclau + + + Port %1 + StorageBusChannel + Port %1 + + + VHD Image + DiskStorageType + Imatge VHD + + + Solaris Audio + AudioDriverType + Solaris Audio + + + PulseAudio + AudioDriverType + PulseAudio + + + ICH AC97 + AudioControllerType + ICH AC97 + + + SoundBlaster 16 + AudioControllerType + SoundBlaster 16 + + + PCnet-PCI II (Am79C970A) + NetworkAdapterType + PCnet-PCI II (Am79C970A) + + + PCnet-FAST III (Am79C973) + NetworkAdapterType + PCnet-FAST III (Am79C973) + + + Intel PRO/1000 MT Desktop (82540EM) + NetworkAdapterType + Intel PRO/1000 MT Desktop (82540EM) + + + PIIX3 + IDEControllerType + PIIX3 + + + PIIX4 + IDEControllerType + PIIX4 + + + Intel PRO/1000 T Server (82543GC) + NetworkAdapterType + Intel PRO/1000 T Server (82543GC) + + + <nobr>Vendor ID: %1</nobr> + USB filter tooltip + <nobr>ID del venedor: %1</nobr> + + + <nobr>Product ID: %2</nobr> + USB filter tooltip + <nobr>ID del producte: %2</nobr> + + + <nobr>Revision: %3</nobr> + USB filter tooltip + <nobr>Revisió: %3</nobr> + + + <nobr>Product: %4</nobr> + USB filter tooltip + <nobr>Producte: %4</nobr> + + + <nobr>Manufacturer: %5</nobr> + USB filter tooltip + <nobr>Fabricant: %5</nobr> + + + <nobr>Serial No.: %1</nobr> + USB filter tooltip + <nobr>No. de sèrie: %1</nobr> + + + <nobr>Port: %1</nobr> + USB filter tooltip + <nobr>Port: %1</nobr> + + + <nobr>State: %1</nobr> + USB filter tooltip + <nobr>Estat: %1</nobr> + + + host interface, %1 + details report (network) + Interfície amfitriona, %1 + + + internal network, '%1' + details report (network) + xarxa interna, '%1' + + + Adapter %1 + network + Adaptador %1 + + + <br><nobr>Type&nbsp;(Format):&nbsp;&nbsp;%2&nbsp;(%3)</nobr> + hard disk + <br><nobr>Tipus&nbsp;(format):&nbsp;&nbsp;%2&nbsp;(%3)</nobr> + + + <br><nobr>Attached to:&nbsp;&nbsp;%1</nobr> + medium + <br><nobr>Connectat a:&nbsp;&nbsp;%1</nobr> + + + <i>Not&nbsp;Attached</i> + medium + <i>No&nbsp;connectat</i> + + + <br><i>Checking accessibility...</i> + medium + <br><i>S'està comprovant l'accessibilitat...</i> + + + <hr>Failed to check media accessibility.<br>%1. + medium + <hr>Ha fallat la comprovació de l'accessibilitat.<br>%1. + + + <hr><img src=%1/>&nbsp;Attaching this hard disk will be performed indirectly using a newly created differencing hard disk. + medium + <hr><img src=%1/>&nbsp;Per a connectar este disc dur es crearà un altre disc dur diferenciat. + + + Checking... + medium + S'està comprovant... + + + Inaccessible + medium + No s'hi pot accedir + + + <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. + <hr>No s'hi pot accedir a alguns dels suports d'este disc. Feu servir el gestor de suports virtuals al mode <b>Mostra diferències als discos durs</b> per inspeccionar este suport. + + + %1<hr>This base hard disk is indirectly attached using the following differencing hard disk:<br>%2%3 + %1<hr>Este disc dur base es connecta indirectament fent servint el següent disc dur diferenciat:<br>%2%3 + + + 3D Acceleration + details report + Acceleració 3D + + + Enabled + details report (3D Acceleration) + Activada + + + Disabled + details report (3D Acceleration) + Desactivada + + + Setting Up + MachineState + S'està configurant + + + Differencing + DiskType + S'estan calculant les diferències + + + <nobr>%1 MB</nobr> + details report + <nobr>%1 MB</nobr> + + + Processor(s) + details report + Processador(s) + + + <nobr>%1</nobr> + details report + <nobr>%1</nobr> + + + System + details report + Sistema + + + Remote Display Server Port + details report (VRDP Server) + Port servidor de pantalla remot + + + Remote Display Server + details report (VRDP Server) + Servidor de pantalla remot + + + Disabled + details report (VRDP Server) + Desactivat + + + Display + details report + Pantalla + + + Raw File + PortMode + Fitxer Raw + + + Enabled + details report (2D Video Acceleration) + Activat + + + Disabled + details report (2D Video Acceleration) + Desactivat + + + 2D Video Acceleration + details report + Acceleració de vídeo 2D + + + Not Attached + details report (Storage) + No està connectat + + + Storage + details report + Emmagatzematge + + + Teleported + MachineState + Teleportat + + + Guru Meditation + MachineState + Mediació gurú + + + Teleporting + MachineState + Telepotació + + + Taking Live Snapshot + MachineState + S'està capturant la captura + + + Teleporting Paused VM + MachineState + S'està teleportant la MV en pausa + + + Restoring Snapshot + MachineState + S'està restaurant la captura + + + Deleting Snapshot + MachineState + S'està eliminant la captura + + + Floppy + StorageBus + Disquet + + + Device %1 + StorageBusDevice + Dispositiu %1 + + + IDE Primary Master + New Storage UI : Slot Name + IDE primari mestre + + + IDE Primary Slave + New Storage UI : Slot Name + IDE primari esclau + + + IDE Secondary Master + New Storage UI : Slot Name + IDE secondari mestre + + + IDE Secondary Slave + New Storage UI : Slot Name + IDE secondari esclau + + + SATA Port %1 + New Storage UI : Slot Name + Port SATA %1 + + + SCSI Port %1 + New Storage UI : Slot Name + Port SCSI %1 + + + Floppy Device %1 + New Storage UI : Slot Name + Disquetera %1 + + + Paravirtualized Network (virtio-net) + NetworkAdapterType + Xarxa paravirtualitzada (virtio-net) + + + I82078 + StorageControllerType + I82078 + + + Empty + medium + Buit + + + Host Drive '%1' + medium + Dispositiu amfitrió %1 + + + Host Drive %1 (%2) + medium + Dispositiu amfitrió %1 (%2) + + + <p style=white-space:pre>Type (Format): %1 (%2)</p> + medium + <p style=white-space:pre>Tipus (format): %1 (%2)</p> + + + <p>Attached to: %1</p> + image + <p>Connectat a: %1</p> + + + <i>Not Attached</i> + image + <i>No connectat</i> + + + <i>Checking accessibility...</i> + medium + <i>S'està comprovant l'accessibilitat...</i> + + + Failed to check media accessibility. + medium + No s'ha pogut comprovar l'accessibilitat al suport. + + + <b>No medium selected</b> + medium + <b>No s'ha seleccionat cap suport</b> + + + You can also change this while the machine is running. + També podeu canviar això mentre la màquina s'està executant. + + + <b>No media available</b> + medium + <b>No hi ha cap suport disponible</b> + + + You can create media images using the virtual media manager. + Podeu crear imatges de suports fent servir el gestor virtual de suports. + + + Attaching this hard disk will be performed indirectly using a newly created differencing hard disk. + medium + Si connecteu este disc dur es millorarà de forma indirecta fent servir un nou disc dur diferenciat. + + + 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. + medium + Alguns dels suports d'este 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 estos suports. + + + This base hard disk is indirectly attached using the following differencing hard disk: + medium + Este disc dur base es connecta indirectament fent servir el disc dur diferenciat següent: + + + %n year(s) + + %n any + %n anys + %n anys + + + + %n month(s) + + %n mes + %n mesos + %n mesos + + + + %n day(s) + + %n dia + %n dies + %n dies + + + + %n hour(s) + + %n hora + %n hores + %n hores + + + + %n minute(s) + + %n minut + %n minuts + %n minuts + + + + %n second(s) + + %n segon + %n segons + %n segons + + + + (CD/DVD) + (CD/DVD) + + + + VBoxGlobalSettings + + '%1 (0x%2)' is an invalid host key code. + '%1 (0x%2)' no és un codi de tecla d'amfitrió vàlid. + + + The value '%1' of the key '%2' doesn't match the regexp constraint '%3'. + El valor '%1' de la tecla '%2' no concorda amb la restricció de l'expressió regular '%3'. + + + Cannot delete the key '%1'. + No es pot eliminar la tecla '%1'. + + + + VBoxGlobalSettingsDlg + + Category + Categoria + + + [id] + [id] + + + [link] + [enllaç] + + + [name] + [nom] + + + <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>. + <i>Seleccioneu una categoria de paràmetres en la llista de l'esquerra i deplaceu el ratolí sobre un element de la dreta per obtindre més informació<i>. + + + General + General + + + 0 + 0 + + + #general + #general + + + Input + Entrada + + + 1 + 1 + + + #input + #input + + + USB + USB + + + 2 + 2 + + + Default &Folders + Carpetes &Predeterminades + + + Machines + Màquines + + + VDI files + Fitxers VDI + + + Select + Selecciona + + + &Keyboard + &Teclat + + + &Host Key + Tecla d'&amfitrió + + + &Auto capture keyboard + &Auto-captura el teclat + + + &USB Device Filters + Filtres del dispositiu &USB + + + Ins + Inser + + + Add Empty (Ins) + Afig buit (Inser) + + + Alt+Ins + Alt+Inser + + + Add From (Alt+Ins) + Afig des de (Alt+Inser) + + + Del + Supr + + + Remove (Del) + Elimina (Supr) + + + Removes the selected USB filter. + Elimina el filtre d'USB seleccionat. + + + Ctrl+Up + Ctrl+Fletxa amunt + + + Move Up (Ctrl+Up) + Mou amunt (Ctrl+Fletxa amunt) + + + Moves the selected USB filter up. + Mou amunt el filtre d'USB seleccionat. + + + Ctrl+Down + Ctrl+Fletxa avall + + + Move Down (Ctrl+Down) + Mou avall (Ctrl+Fletxa avall) + + + Moves the selected USB filter down. + Mou avall el filtre d'USB seleccionat. + + + Help + Ajuda + + + F1 + F1 + + + Displays the dialog help. + Mostra el diàleg d'ajuda. + + + Invalid settings detected + S'han detectat paràmetres no vàlids + + + &OK + &D'acord + + + Accepts (saves) changes and closes the dialog. + Accepta (alça) els canvis i tanca el diàleg. + + + Cancel + Cancel·la + + + Cancels changes and closes the dialog. + Cancel·la els canvis i tanca el diàleg. + + + VirtualBox Preferences + Preferències del VirtualBox + + + 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. + 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ó. + + + New Filter %1 + usb + Filtre nou %1 + + + Language + Idioma + + + Language + Idioma + + + 3 + 3 + + + &Interface Language + Idioma de la &interfície + + + Author(s): + Autor(s): + + + Language: + Idioma: + + + (built-in) + Language + (integrat) + + + <unavailable> + Language + <no disponible> + + + <unknown> + Author(s) + <desconegut> + + + +<qt>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.</qt> + + +<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> + + + + Default + Language + Predeterminat + + + 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. + Mostra la ruta cap a la carpeta de fitxers VDI predeterminada. S'usa esta carpeta, si no se n'especifica explícitament una altra, quan s'afig o es crea un disc virtual. + + + 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. + Reinicia el camí a la carpeta de màquines virtuals al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir este diàleg, s'hi mostrarà este camí. + + + 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. + Reinicia el camí a la carpeta de fitxers VDI al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir este diàleg, s'hi mostrarà este camí. + + + Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines. + Mostra la ruta cap a la carpeta de màquines virtuals predeterminada. S'usa esta carpeta, si no se n'especifica explícitament una altra, quan es crea una màquina virtual. + + + Opens a dialog to select the default VDI folder. + Obri un diàleg per seleccionar la carpeta de fitxers VDI predeterminada. + + + Opens a dialog to select the default virtual machine folder. + Obri un diàleg per seleccionar la carpeta de màquines virtuals predeterminada. + + + 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. + Si activeu esta 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. + + + Lists all global USB filters. The checkbox to the left defines whether the particular filter is enabled or not. + Relaciona tots els filtres d'USB globals. La casella de selecció de l'esquerra defineix si s'activa o no el filtre corresponent. + + + Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device. + Afig un filtre d'USB nou amb tots els camps definits inicialment com a cadenes buides. Tingueu en compte que un filtre com este concordarà amb qualsevol dispositiu USB connectat. + + + Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC. + Afig 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ó. + + + V&RDP Authentication Library + Biblioteca d'autenticació V&RDP + + + Displays the path to the library that provides authentication for Remote Display (VRDP) clients. + Mostra la ruta cap a la biblioteca que proveeix l'autenticació per a clients de la pantalla remota (VRDP). + + + Opens a dialog to select the VRDP authentication library file. + Obri un diàleg per seleccionar el fitxer de la biblioteca d'autenticació VRDP . + + + 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. + Reinicia el fitxer de la biblioteca d'autenticació al seu valor predeterminat. Després d'acceptar els canvis i tornar a obrir este diàleg, s'hi mostrarà este fitxer. + + + &Extended Features + Funcions &esteses + + + Enable &VT-x/AMD-V + Activa &VT-x/AMD-V + + + 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. + 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. + + + + <qt>Lists all global USB + filters. 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.</qt> + + +<qt>Llista els filtres USB +globals. La casella de selecció +de la dreta defineix què filtre +concret està activat o no. Feu +servir el menú de context o +els botons de la dreta per +afegir o eliminar filtres USB.</qt> + + + Add Empty Filter + Afig Filtre Buit + + + &Add Empty Filter + &Afig Filtre Buit + + + + <qt>Adds a new USB filter with all fields initially set to + empty strings. Note that such a filter will match any attached USB + device.</qt> + + <qt>Afig un nou filtre USB amb tots els camps fixats com +a cadenes buides. Tingueu en compte que els filtres coincidiran +amb qualsevol dispositiu USB connectat.</qt> + + + Add Filter From Device + Afig un Filtre des d'un Dispositiu + + + A&dd Filter From Device + Afig un Filtre des d'un &Dispositiu + + + <qt>Adds a new USB filter with all fields set to the + values of the selected USB device attached to the host + PC.</qt> + + <qt>Afig un nou filtre USB amb tots els camps +fixats als valors del dispositu USB seleccionat connectat +al sistema amfitrió.</qt> + + + Remove Filter + Elimina el filtre + + + &Remove Filter + Elimina el filt&re + + + + <qt>Removes the highlighted USB filter.</qt> + + <qt>Elimina el filtre USB remarcat.</qt> + + + Move Filter Up + Mou el Filtre Amunt + + + &Move Filter Up + &Mou el Filtre Amunt + + + + <qt>Moves the highlighted USB filter up.</qt> + + <qt>Mou el filtre remarcat amunt.</qt> + + + Move Filter Down + Mou el Filtre Avall + + + M&ove Filter Down + M&ou el Filtre Avall + + + + <qt>Moves the highlighted USB filter down.</qt> + + <qt>Mou el filtre remarcat avall.</qt> + + + + VBoxHardDiskSettings + + Slot + Ranura + + + Hard Disk + Disc dur + + + VBoxHardDiskSettings + VBoxHardDiskSettings + + + &Hard Disks + &Discos durs + + + &Enable SATA Controller + Habilita &el Controlador SATA + + + + <qt>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.</qt> + + <qt>Quan estiga marcat, habilita el controlador +virtual SATA per a esta màquina. Tingueu en +compte qu no podeu connectar discos durs a ports +SATA quan el controlador SATA no es troba actiu.</qt> + + + Hard Disks &Attachments + Discos durs &connectats + + + + <qt>Lists all hard disks attached to + this machine. Use a mouse double-click or the + <tt>F2</tt>/<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.</qt> + + <qt>Mostra tots els discos durs +connectats a esta màquina. Feu doble +clic amb el ratolí o premeu el botó +<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 +per afegir o eliminar les adjuncions als discos +durs.</qt> + + + Add Attachment + Afig una adjunció + + + &Add Attachment + &Afig una adjunció + + + Ins + Ins + + + + <qt>Adds a new hard disk attachment.</qt> + + <qt>Afig una nova adjunció al disc dur.</qt> + + + Remove Attachment + Elimina l'adjunció + + + &Remove Attachment + &Elimina l'adjunció + + + Delete + Suprimeix + + + + <qt>Removes the highlighted hard disk attachment.</qt> + + <qt>Elimina l'adjunció al disc dur remarcada.</qt> + + + Select Hard Disk + Seleccioneu un Disc Dur + + + &Select Hard Disk + &Seleccioneu un Disc Dur + + + Ctrl+Space + Ctrl+Espai + + + + <qt>Invokes the Virtual Disk Manager to select a hard disk + to attach to the currently highlighted slot.</qt> + + <qt>Invoca el gestor de discos virtuals per a seleccionar +un disc dur per connectar a la ranura remarcada actualment.</a> + + + <i>%1</i> uses the hard disk that is already attached to <i>%2</i> + <i>%1</i> fa servir el disc dur que es troba connectat a <i>%2</i> + + + Double-click to add a new attachment + Doble clic per afegir una nova adjunció + + + No hard disk is selected for <i>%1</i> + No s'ha seleccionat cap disc dur per <i>%1</i> + + + + VBoxHelpButton + + &Help + &Ajuda + + + + VBoxImportApplianceWgt + + Importing Appliance ... + S'està important l'aplicació virtual... + + + Reading Appliance ... + S'està llegint l'aplicació virtual... + + + + VBoxImportApplianceWzd + + Select an appliance to import + Seleccioneu una aplicació virtual per importar + + + Open Virtualization Format (%1) + Format obert de virtualització (%1) + + + Appliance Import Wizard + Assistent d'importació d'aplicacions virtuals + + + Welcome to the Appliance Import Wizard! + Benvingut a l'assistent d'importació d'aplicacions virtuals! + + + <!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> + <!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;">Este assitent vos 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;">Arrere</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> + + + < &Back + < &Arrere + + + &Next > + &Següent > + + + Cancel + Cancel·la + + + Appliance Import Settings + Paràmetres d'importació de l'aplicació virtual + + + 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. + Estes 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ó. + + + Restore Defaults + Restaura els paràmetres per defecte + + + &Import > + &Importa > + + + + VBoxImportLicenseViewer + + <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. + <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ó. + + + Software License Agreement + Acord de llicència de programari + + + &Disagree + &No hi estic d'acord + + + &Agree + Hi estic d'&acord + + + &Print... + Im&primeix... + + + &Save... + De&sa... + + + Text (*.txt) + Text (*.txt) + + + Save license to file... + Anomena i alça la llicència... + + + + VBoxLicenseViewer + + I &Agree + Hi estic d'&acord + + + I &Disagree + &No hi estic d'acord + + + VirtualBox License + Llicència del VirtualBox + + + + VBoxLineTextEdit + + &Edit + &Edita + + + + VBoxLogSearchPanel + + Close the search panel + Tanca el tauler de cerca + + + Find + Cerca + + + Enter a search string here + Introduïu ací la cadena a cercar + + + &Previous + &Anterior + + + Search for the previous occurrence of the string + Cerca la coincidència anterior de la cadena + + + &Next + &Següent + + + Search for the next occurrence of the string + Cerca la coincidència següent de la cadena + + + C&ase Sensitive + Distingeix entre &majúscules i minúscules + + + Perform case sensitive search (when checked) + Si activeu esta casella, la cerca distingirà entre majúscules i minúscules + + + String not found + No s'ha trobat la cadena + + + + VBoxMediaComboBox + + <no hard disk> + <no hi ha cap disc dur> + + + No hard disk + No hi ha cap disc dur + + + No media available. Use the Virtual Media Manager to add media of the corresponding type. + No hi ha suports disponibles. Feu servir el gestor de suports virtuals per a afegir-ne de nous del tipus corresponent. + + + <no media> + <sense medis> + + + + VBoxMediaManagerDlg + + &Actions + &Accions + + + &New... + &Nova... + + + &Add... + &Afig... + + + R&emove + &Elimina + + + Re&lease + A&llibera + + + Re&fresh + Re&fresca + + + Create a new virtual hard disk + Crea un disc dur virtual nou + + + Add an existing medium + Afig un suport existent + + + Remove the selected medium + Elimina el suport seleccionat + + + Release the selected medium by detaching it from the machines + Allibera el suport seleccionat de forma que ja no estiga connectat a les màquines + + + Refresh the media list + Refresca la llista de suports + + + Location + Ubicació + + + Type (Format) + Tipus (Format) + + + Attached to + Connectat a + + + Checking accessibility + S'està comprovant l'accessibilitat + + + &Select + &Selecciona + + + All hard disk images (%1) + Totes les imatges de disc dur (%1) + + + All files (*) + Tots els fitxers (*) + + + Select a hard disk image file + Seleccioneu un fitxer d'imatge de disc dur + + + CD/DVD-ROM images (*.iso);;All files (*) + Imatges de CD/DVD (*.iso);;Tots els fitxers (*) + + + Select a CD/DVD-ROM disk image file + Seleccioneu un fitxer d'imatge de disc CD/DVD + + + Floppy images (*.img);;All files (*) + Imatges de disquet (*.img);;Tots els fitxers (*) + + + Select a floppy disk image file + Seleccioneu un fitxer d'imatge de disquet + + + <i>Not&nbsp;Attached</i> + <i>No&nbsp;connectat</i> + + + -- + no info + -- + + + Virtual Media Manager + Gestor de suports virtuals + + + Hard &Disks + &Discs durs + + + Name + Nom + + + Virtual Size + Mida virtual + + + Actual Size + Mida actual + + + &CD/DVD Images + Imatges de &CD/DVD + + + Size + Mida + + + &Floppy Images + Imatges de dis&quet + + + Attached to + VMM: Virtual Disk + Connectat a + + + Attached to + VMM: CD/DVD Image + Connectat a + + + Attached to + VMM: Floppy Image + Connectat a + + + + VBoxMiniToolBar + + Always show the toolbar + Mostra sempre la barra d'eines + + + Exit Full Screen or Seamless Mode + Ix del mode de pantalla completa o del mode fluid + + + Close VM + Tanca la màquina virtual + + + + VBoxNIList + + VirtualBox Host Interface %1 + Interfície amfitriona %1 del VirtualBox + + + <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> + <p>Voleu suprimir la interfície de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Esta interfície potser s'estiga fent servir per un o més adaptadors de xarxa d'esta o altra màquina virtual. Després de suprimir-los, estos adaptadors no podran treballar fins que corregiu els paràmetres triant un nom d'interfície diferent o un tipus diferent d'adaptador.</p> + + + Host &Interfaces + &Interfícies de l'amfitrió + + + Lists all available host interfaces. + Mostra totes les interfícies de l'amfitrió disponibles. + + + A&dd New Host Interface + A&fegeix una Nova Interfície d'Amfitrió + + + &Remove Selected Host Interface + &Suprimeix la Interfície Seleccionada d'Amfitrió + + + Adds a new host interface. + Afig una nova interfície d'amfitrió. + + + Removes the selected host interface. + Suprimeix la interfície amfitriona seleccionada. + + + + VBoxNetworkDialog + + Network Adapters + Adaptadors de xarxa + + + + VBoxNewHDWzd + + Create New Virtual Disk + Crea un disc virtual nou + + + <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> + <p>Este auxiliar vos 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>Arrere</b> per a tornar a la pàgina anterior.</p> + + + Welcome to the Create New Virtual Disk Wizard! + Benvingut a l'auxiliar per a la creació d'un disc virtual nou! + + + <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.</p> + <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> + + + Image Type + Tipus d'imatge + + + &Dynamically expanding image + Imatge que s'expandeix &dinàmicament + + + &Fixed-size image + Imatge de mida &fixa + + + Virtual Disk Image Type + Tipus d'imatge de disc virtual + + + <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> + <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> + + + &Image File Name + Nom del fitxer d'&imatge + + + Select + Selecciona + + + <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> + <p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Esta serà la mida que s'informarà +al sistema operatiu client com a mida del disc dur.</p> + + + Image &Size + &Mida de la imatge + + + Virtual Disk Location and Size + Ubicació i mida del disc virtual + + + You are going to create a new virtual hard disk image with the following parameters: + Esteu a punt de crear una imatge de disc dur virtual amb els paràmetres següents: + + + If the above settings are correct, press the <b>Finish</b> button. + Once you press it, a new hard disk image will be created. + + Si el que hi ha més amunt és correcte premeu el botó <b>Finalitza</b>. + Quan el premeu, es crearà una imatge de disc dur nova. + + + + Summary + Resum + + + <nobr>%1 Bytes</nobr> + <nobr>%1 bytes</nobr> + + + <table><tr><td>Type:</td><td>%1</td></tr><tr><td>Location:</td><td>%2</td></tr><tr><td>Size:</td><td>%3&nbsp;(%4&nbsp;Bytes)</td></tr></table> + <table><tr><td>Tipus:</td><td>%1</td></tr><tr><td>Ubicació:</td><td>%2</td></tr><tr><td>Mida:</td><td>%3&nbsp;(%4&nbsp;Bytes)</td></tr></table> + + + Hard disk images (*.vdi) + Imatges de disc dur (*.vdi) + + + Select a file for the new hard disk image file + Seleccioneu un fitxer per al fitxer d'imatge del disc dur nou + + + <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> + <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 +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 +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> + + + <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> + <p>Este auxiliar vos 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>Arrere</b> per a tornar a la pàgina anterior.</p> + + + < &Back + < &Arrere + + + &Next > + &Següent > + + + <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> + <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> + + + <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> + <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> + + + <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> + <p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Esta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p> + + + If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk image will be created. + Si el que hi ha més amunt és correcte premeu el botó <b>Finalitza</b>. Quan el premeu, es crearà una imatge de disc dur nova. + + + &Finish + &Finalitza + + + Type + summary + Tipus + + + Location + summary + Ubicació + + + Size + summary + Mida + + + Bytes + summary + Bytes + + + Cancel + Cancel·la + + + <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> + <p>Este auxiliar vos 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>Arrere</b> per a tornar a la pàgina anterior.</p> + + + Hard Disk Storage Type + Tipus d'emmagatzematge per al disc dur + + + <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> + <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ó consumisca 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> + + + Storage Type + Tipus d'emmagatzematge + + + &Dynamically expanding storage + Imatge que s'expandeix &dinàmicament + + + &Fixed-size storage + Imatge de mida &fixa + + + <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> + <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> + + + &Location + &Ubicació + + + <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> + <p>Seleccioneu la mida de la imatge del disc dur virtual en megabytes. Esta serà la mida que s'informarà al sistema operatiu client com a mida del disc dur.</p> + + + &Size + &Mida + + + You are going to create a new virtual hard disk with the following parameters: + Ara creareu una imatge de disc dur virtual amb els paràmetres següents: + + + If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk will be created. + Si el que hi ha més amunt és correcte premeu el botó <b>Finalitza</b>. Quan el premeu, es crearà una imatge de disc dur nova. + + + + VBoxNewVMWzd + + Create New Virtual Machine + Crea una màquina virtual nova + + + <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> + <p>Este auxiliar vos 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>Arrere</b> per a tornar a la pàgina anterior.</p> + + + Welcome to the New Virtual Machine Wizard! + Benvingut a l'auxiliar per a la creació d'una màquina virtual nova! + + + <p>Enter a name for the new virtual machine and select the type of the guest operating +system you plan to install onto the virtual machine.</p> +<p>The name of the virtual machine usually indicates its software and hardware configuration. +It will be used by all VirtualBox components to identify your virtual machine.</p> + <p>Introduïu un nom per a la màquina virtual nova i seleccioneu el tipus del sistema +operatiu client que voleu instal·lar en la màquina virtual.</p> +<p>Normalment, el nom de la màquina virtual indica la seua configuració de programari i maquinari. +Tots els components del VirtualBox el faran servir per a identificar la màquina virtual.</p> + + + N&ame + N&om + + + OS &Type + &Tipus de sistema operatiu + + + VM Name and OS Type + Nom de la màquina virtual i tipus de sistema operatiu + + + <p>Select the amount of base memory (RAM) in megabytes to be allocated to the virtual machine.</p> + <p>Seleccioneu la quantitat de memòria base (RAM) en megabytes que s'assignaran a la màquina virtual</p> + + + Base &Memory Size + Mida de la &memòria base + + + < + < + + + = + = + + + > + > + + + MB + MB + + + Memory + Memòria + + + <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> + <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 vos cal una configuració de disc dur més complexa, podeu també saltar-vos este +pas i connectar discos durs més avant, fent servir el diàleg de configuració de la màquina virtual.</p> + + + B&oot Hard Disk (Primary Master) + D&isc dur d'arrencada (primari mestre) + + + N&ew... + N&ou... + + + E&xisting... + E&xistents... + + + Virtual Hard Disk + Disc dur virtual + + + + <p> + You are going to create a new virtual machine + with the following parameters: + </p> + + + <p> + Creareu una màquina virtual nova + amb els paràmetres següents: + </p> + + + + + <p> + If the above is correct press the <b>Finish</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> + + + <p> + Si el que hi ha més amunt és correcte premeu el botó <b>Finalitza</b>. + Quan el premeu, es crearà una màquina virtual nova. + </p><p> + Tingueu en compte que podeu canviar estos i els altres paràmetres de la + màquina virtua creada en qualsevol moment fent servir el + diàleg <b>Paràmetres</b> a través del + menú de la finestra principal. + </p> + + + + Summary + Resum + + + <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;MB</qt> + + + <tr><td>Name:</td><td>%1</td></tr><tr><td>OS Type:</td><td>%2</td></tr><tr><td>Base Memory:</td><td>%3&nbsp;MB</td></tr> + <tr><td>Nom:</td><td>%1</td></tr><tr><td>Tipus de sistema operatiu:</td><td>%2</td></tr><tr><td>Memòria RAM:</td><td>%3&nbsp;MB</td></tr> + + + <tr><td>Boot Hard Disk:</td><td>%4</td></tr> + <tr><td>Disc dur d'arrencada:</td><td>%4</td></tr> + + + The recommended base memory size is <b>%1</b> MB. + La mida de memòria base recomanada és <b>%1</b> MB. + + + The recommended size of the boot hard disk is <b>%1</b> MB. + La mida del disc dur d'arrencada recomanada és <b>%1</b> MB. + + + <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> + <p>Este auxiliar vos 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>Arrere</b> per a tornar a la pàgina anterior.</p> + + + < &Back + < &Arrere + + + &Next > + &Següent > + + + <p>Enter a name for the new virtual machine and select the type of the guest operating system you plan to install onto the virtual machine.</p><p>The name of the virtual machine usually indicates its software and hardware configuration. It will be used by all VirtualBox components to identify your virtual machine.</p> + <p>Introduïu un nom per a la màquina virtual nova i seleccioneu el tipus del sistema operatiu client que voleu instal·lar en la màquina virtual.</p><p>Normalment, el nom de la màquina virtual indica la seua configuració de programari i maquinari. Tots els components del VirtualBox el faran servir per a identificar la màquina virtual.</p> + + + &Create new hard disk + &Crea un disc nou + + + &Use existing hard disk + &Fes servir un disc existent + + + <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> + <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 vos cal una configuració de disc dur més complexa, podeu també saltar-vos este pas i connectar discos durs més avant, fent servir el diàleg de configuració de la màquina virtual.</p> + + + <p>You are going to create a new virtual machine with the following parameters:</p> + Creareu una màquina virtual nova amb els paràmetres següents:</p> + + + <p>If the above is correct press the <b>Finish</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> + <p>Si el que hi ha més amunt és correcte premeu el botó <b>Finalitza</b>. Quan el premeu, es crearà una màquina virtual nova.</p><p>Tingueu en compte que podeu canviar estos i els altres paràmetres de la màquina virtual creada en qualsevol moment fent servir el diàleg <b>Paràmetres</b> a través del menú de la finestra principal.</p> + + + &Finish + &Finalitza + + + MB + megabytes + MB + + + Name + summary + Nom + + + OS Type + summary + Tipus de sistema operatiu + + + Base Memory + summary + Memòria RAM + + + Boot Hard Disk + summary + Arrenca Disc Dur + + + Cancel + Cancel·la + + + <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> + <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 vos cal una configuració de disc dur més complexa, podeu també saltar-vos este pas i connectar discos durs més avant, fent servir el diàleg de configuració de la màquina virtual.</p> + + + Boot Hard &Disk (Primary Master) + D&isc dur d'arrencada (primari mestre) + + + + VBoxOSTypeSelectorWidget + + Operating &System: + &Sistema Operatiu: + + + Displays the operating system family that you plan to install into this virtual machine. + Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'esta màquina virtual. + + + V&ersion: + V&ersió: + + + Displays the operating system type that you plan to install into this virtual machine (called a guest operating system). + Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'esta màquina virtual (anomenat sistema operatiu client). + + + &Version: + &Versió: + + + + VBoxProblemReporter + + Callee: + error info + Subrutina: + + + Callee&nbsp;RC: + error info + Subrutina&nbsp;RC: + + + CD/DVD image + Imatge CD/DVD + + + Component: + error info + Component: + + + Do not show this message again + msg box flag + No tornes a mostrar este missatge + + + Failed to access the USB subsystem. + No s'ha pogut accedir al subsistema USB. + + + Failed to apply the settings to the virtual machine <b>%1</b>. + No s'ha pogut aplicar els paràmetres de configuració a la màquina virtual <b>%1</b>. + + + 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>. + 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>. + + + Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>. + No s'ha pogut afegir el dispositiu USB <b>%1</b> a la màquina virtual <b>%2</b>. + + + Failed to change the snapshot folder path of the virtual machine <b>%1<b> to <nobr><b>%2</b></nobr>. + No s'ha pogut canviar la ruta de la carpeta de captures de la màquina virtual <b>%1<b> a <nobr><b>%2</b></nobr>. + + + Failed to create a new session. + No s'ha pogut crear una nova sessió. + + + Failed to create a new virtual machine. + No s'ha pogut crear una nova màquina virtual. + + + Failed to create a new virtual machine <b>%1</b>. + No s'ha pogut crear una nova màquina virtual <b>%1</b>. + + + Failed to create the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>. + 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>. + + + Failed to create a snapshot of the virtual machine <b>%1</b>. + No s'ha pogut alçar una captura de pantalla de la màquina virtual <b>%1</b>. + + + Failed to create the host network interface <b>%1</b>. + No s'ha pogut crear la interfície de xarxa <b>%1</b> de l'amfitrió. + + + Failed to create the virtual hard disk image <nobr><b>%1</b>.</nobr> + No s'ha pogut crear la imatge de disc dur virtual <nobr><b>%1</b>.</nobr> + + + Failed to delete the virtual hard disk image <b>%1</b>. + No s'ha pogut eliminar la imatge de disc dur <b>%1</b>. + + + Failed to detach a hard disk image from the device slot %1 of the controller %2 of the machine <b>%3</b>. + No s'ha pogut treure la imatge de disc dur del despositiu %1 del controlador %2 de la màquina <b>%3</b>. + + + Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>. + No s'ha pogut treure dispositiu USB <b>%1</b> de la màquina virtual <b>%2</b>. + + + Failed to discard the current snapshot and the current state of the virtual machine <b>%1</b>. + No s'ha pogut descartar l'actual captura ni l'estat actual de la màquina virtual<b>%1</b>. + + + Failed to discard the current state of the virtual machine <b>%1</b>. + No s'ha pogut descartar l'estat actual de la màquina virtual <b>%1</b>. + + + Failed to discard the saved state of the virtual machine <b>%1</b>. + No s'ha pogut descartar l'estat alçat de la màquina virtual <b>%1</b>. + + + Failed to discard the snapshot <b>%1</b> of the virtual machine <b>%2</b>. + No s'ha pogut descartar la captura de pantalla <b>%1</b> de la màquina virtual <b>%2</b>. + + + Failed to find license files in <nobr><b>%1</b></nobr>. + No s'ha pogut trobar cap fitxer de llicència a <nobr><b>%1</b></nobr>. + + + Failed to determine the accessibility state of the media <nobr><b>%1</b></nobr>. Some of the registered media may become inaccessible. + No s'ha pogut accedir a l'estat del suport <nobr><b>%1</b></nobr>. No es podrà accedir a alguns dels dispositius. + + + Failed to load the settings of the virtual machine <b>%1</b>. + No s'ha pogut carregar els paràmetres de la màquina virtual <b>%1</b>. + + + Failed to open a session for the virtual machine <b>%1</b>. + No s'ha pogut obrir una sessió per a la màquina virtual <b>%1</b>. + + + Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions. + No s'ha pogut obrir el fitxer de llicència <nobr><b>%1</b></nobr>. Comproveu els permisos del fitxer. + + + Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type. + No s'ha pogut obrir <tt>%1</tt>. Assegureu-vos que el vostre entorn d'escriptori pot gestionar este tipus d'URL. + + + Failed to pause the execution of the virtual machine <b>%1</b>. + No s'ha pogut pausar l'execució de la màquina virtual <b>%1</b>. + + + Failed to register the %1 <nobr><b>%2</b></nobr>. + No s'ha pogut registrar %1 <nobr><b>%2</b></nobr>. + + + Failed to remove the host network interface <b>%1</b>. + No s'ha pogut suprimir la interfície de xarxa <b>%1</b> de l'amfitrió. + + + Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>. + 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>. + + + Failed to remove the virtual machine <b>%1</b>. + No s'ha pogut eliminar la màquina virtual <b>%1</b>. + + + Failed to resume the execution of the virtual machine <b>%1</b>. + No s'ha pogut reprendre l'execució de la màquina virtual <b>%1</b>. + + + Failed to save the settings of the virtual machine <b>%1</b>. + No s'ha pogut alçar els canvis de la màquina virtual <b>%1</b>. + + + Failed to save the state of the virtual machine <b>%1</b>. + No s'ha pogut alçar l'estat de la màquina virtual <b>%1</b>. + + + Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>. + No s'ha pogut enviar l'esdeveniment de prémer el botó d'iniciar/aturar a la màquina virtual <b>%1</b>. + + + Failed to set global VirtualBox properties. + No s'han pogut establir les propietats globals del VirtualBox. + + + Failed to start the virtual machine <b>%1</b>. + No s'ha pogut iniciar la màquina virtual <b>%1</b>. + + + Failed to stop the virtual machine <b>%1</b>. + No s'ha pogut aturar la màquina virtual <b>%1</b>. + + + Failed to unregister the %1 <nobr><b>%2</b></nobr>. + No s'ha pogut elimianar del registre %1 <nobr><b>%2</b></nobr>. + + + floppy image + imatge disquet + + + hard disk + disc dur + + + Interface: + error info + Interfície: + + + <nobr>Error ID: </nobr> + runtime error info + <nobr>ID de l'error:</nobr> + + + <nobr>Fatal Error</nobr> + runtime error info + <nobr>Error fatal</nobr> + + + <nobr>Non-Fatal Error</nobr> + runtime error info + <nobr>Error no fatal</nobr> + + + <nobr>Warning</nobr> + runtime error info + <nobr>Avís</nobr> + + + <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> + <p>S'ha produït un error crític mentre s'executava la màquina virtual, que s'ha aturat.</p><p>Per obtindre 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> + + + <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> + <p>S'ha produït un error mentre la màquina virtual s'executava i es tancarà. Es recomanable copiar el missatge d'error següent per a una anàlisi posterior:</p> + + + <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> + <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> + + + <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> + <p>Esteu segur que voleu descartar l'estat alçat de la màquina virtual<b>%1</b>?</p><p>Esta operació és equivalent a reiniciar o tancar la màquina virtual de forma no adequada.</p> + + + <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> + <p>Esteu segur que voleu baixar la imatge del VirtualBox Guest Additions des de <nobr><a href="%1">%2</a></nobr> (mida %3 bytes)?</p> + + + <p>Are you sure you want to permanently delete the virtual machine <b>%1</b>?</p><p>This operation cannot be undone.</p> + <p>Esteu segur que voleu suprimir de forma permanent la màquina virtual <b>%1</b>?</p><p>Esta operació no es podrà desfer.</p> + + + <p>Are you sure you want to unregister the inaccessible virtual machine <b>%1</b>?</p><p>You will not be able to register it again from GUI.</p> + <p>Esteu segur que voleu suprimir del registre la màquina virtaul inaccessible<b>%1</b>?</p><p>No podreu registrar-la novament des de la interfície.</p> + + + <p>Cannot run VirtualBox in <i>VM Selector</i> mode due to local restrictions.</p><p>The application will now terminate.</p> + <p>No es pot executar VirtualBox en el mode <i>VM Selector</i> degut a restriccions locals.</p><p>L'aplicació es tancarà.</p> + + + <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> + <p>Enhorabona! Vos heu registrat com a usuari de VirtualBox.</p><p>Gràcies per haver omplit el formulari!</p> + + + <p>Could not enter seamless mode due to insufficient guest video memory.</p><p>You should configure the VM to have at least <b>%1</b> of video memory.</p> + <p>No es pot entrar al mode fluid degut a que no hi ha suficient memòria de vídeo.</p><p>Heu de configurar la màquina virtual per tal que tinga almenys <b>%1</b> de memòria de vídeo.</p> + + + <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> + <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> + + + <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> + <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> + + + <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> + <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> + + + <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> + <p>Voleu esborrar este 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. Esta operació no es podrà desfer.</p> + + + <p>Do you want to remove (unregister) the virtual hard disk <nobr><b>%1</b>?</nobr></p> + <p>Voleu eliminar (suprimir del registre) la imatge virtual de disc dur <nobr><b>%1</b>?</nobr></p> + + + <p>Failed to connect to the VirtualBox online registration service.</p><p>%1</p> + <p>No s'ha pogut connectar al servei de registre en línia de VirtualBox.</p><p>%1</p> + + + <p>Failed to create the VirtualBox COM object.</p><p>The application will now terminate.</p> + <p>No s'ha pogut crear l'objecte VirtualBox COM.</p><p>Ara es tancarà l'aplicació.</p> + + + <p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p> + <p>No s'ha pogut baixar la imatge del de VirtualBox Guest Additions des de <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p> + + + <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> + <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> + + + <p>Failed to load the global GUI configuration.</p><p>The application will now terminate.</p> + <p>No s'ha pogut carregar la configuració global de la interfície.</p><p>Ara es tancarà l'aplicació.</p> + + + <p>Failed to register the VirtualBox product</p><p>%1</p> + <p>No s'ha pogut registrar el producte VirtualBox</p><p>%1</p> + + + <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> + <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> + + + <p>Failed to save the global GUI configuration.<p> + <p>No s'ha pogut alçar la configuració global de la interfície.</p> + + + <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> + <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 facen servir fins que estiguen 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 este missatge.</p> + + + <p>Releasing this media image will detach it from the following virtual machine(s): <b>%1</b>.</p><p>Continue?</p> + <p>Llançant esta imatge la separareu de les següents màquines virtuals: <b>%1</b>.</p><p>Voleu continuar?</p> + + + <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> + <p>El fitxer d'imatge <b>%1</b> ja existeix. No podeu crear un nou disc dur virtual que faça servir este fitxer ja que pot ser utilitzat per un altre disc dur virtual.</p><p>Especifiqueu un nom diferent per a la imatge.</p> + + + <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> + <p>S'ha baixat la imatge del VirtualBox Guest Additions des de <nobr><a href="%1">%2</a></nobr> i s'ha alçat localment com a <nobr><b>%3</b>.</nobr></p><p>Voleu registrar esta imatge de CD i montar-la a la unitat virtual de CD/DVD?</p> + + + <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> + <p>La màquina virtual s'executarà, però amb l'error que es descriu a continuació. Podeu ignorar este missatge, però és recomanable solucionar l'error per tal que no es torne a produir.</p> + + + <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> + <p>La Màquina Virtual és actualment en <b>Pausa</pa> i per tant no accepta cap acció provinent del teclat o del ratolí. 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> + + + <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> + <p>La Màquina Virtual ha informat que el sistema client no suporta <b>integració del punter del ratolí</b> al mode de vídeo actual. Heu de capturar el ratolí (clicant sobre la pantalla de la màquina virtual o prement la tecla amfitrió) per tal de poder controlar el ratolí a dins del sistema client.</p> + + + <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> + <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í estiga 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> + + + <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> + <p>La finestra de la màquina virtual està optimitzada per treballar en el mode de color <b>%1&nbsp;bit</b> però la qualitat del color que es mostra actualment està establerta a <b>%2&nbsp;bit</b>.</p><p>. Obriu el diàleg de propietats de la pantalla del sistema client i seleccioneu el mode de color <b>%3&nbsp;bit</b>, si és disponible, per obtindre el millor funcionament possible del subsistema de vídeo.</p><p><b>Nota</b>: Alguns sistemes operatius, com OS/2, necessiten treballar actualment al mode 32&nbsp;bit però informen que és 24&nbsp;bit (16 milions de colors). Haureu de provar a seleccionar una qualitat de color diferent per veure si és correcta i este missatge desapareix o simplemente podeu inhabilitar este missatge si esteu segur que la qualitat de color requerida (%4&nbsp;bit) no és disponible al sistema client.</p> + + + <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> + <p>La màquina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar arrere 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> + + + <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> + <p>La màquina virtual passarà ara al mode <b>fluid</b>. Podeu tornar arrere 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> + + + <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> + <b>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 ratolí, 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·lar Guest Additions</b> des del menú <b>Dispositius</b>.</p> + + + <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> + <b>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 ratolí, 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·lar Guest Additions</b> des del menú <b>Dispositius</b>.</p> + + + <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> + <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> + + + <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> + <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> + + + <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> + <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 estiga 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;. Esta icona indica si el teclat i el ratolí estan en estat de captura o no.</p> + + + <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> + <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 estiga activa i farà que el teclat no estiga disponible per a d'altres aplicacions que s'estiguen 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;. Esta icona indica si el teclat i el ratolí estan en estat de captura o no.</p> + + + Result&nbsp;Code: + error info + Resultat&nbsp;Codi: + + + Severity: + runtime error info + Severitat: + + + There is no virtual machine named <b>%1</b>. + No hi ha cap màquina virtual anomenada <b>%1</b>. + + + VirtualBox - Critical Error + msg box title + VirtualBox - Error crític + + + VirtualBox - Error + msg box title + VirtualBox - Error + + + VirtualBox - Information + msg box title + VirtualBox - Informació + + + VirtualBox - Question + msg box title + VirtualBox - Pregunta + + + VirtualBox - Warning + msg box title + VirtualBox - Avís + + + <p>Failed to save the global VirtualBox settings to <b><nobr>%1</nobr></b>.</p> + <p>No s'ha pogut alçar els paràmetres globals del VirtualBox a <b><nobr>%1</nobr></b>.</p> + + + <p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p> + <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> + + + <p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p> + <p>No s'ha pogut alçar la configuració global de la interfície a <b><nobr>%1</nobr></b>.</p><p>L'aplicació es tancarà.</p> + + + Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>. + No s'ha pogut alçar els paràmetres de la màquina virtual <b>%1</b> a <b><nobr>%2</nobr></b>. + + + Failed to load the settings of the virtual machine <b>%1</b> from <b><nobr>%2</nobr></b>. + No s'ha pogut carregar els paràmetres de la màquina virtual <b>%1</b> des de <b><nobr>%2</nobr></b>. + + + Delete + machine + Suprimeix + + + Unregister + machine + Treu del registre + + + Discard + saved state + Descarta + + + Continue + detach image + Continua + + + <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> + <p>Voleu suprimir este 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. Esta operació no es pot desfer.</p> + + + Delete + hard disk + Suprimeix + + + Unregister + hard disk + Lleva del registre + + + <p>There are hard disks attached to SATA ports of this virtual machine. If you disable the SATA controller, all these hard disks will be automatically detached.</p><p>Are you sure that you want to disable the SATA controller?</p> + <p>Hi ha discos durs connectats als ports SATA a esta màquina virtual. Si deshabiliteu el controlador SATA, tots estos discos es desconnectaran automàticament.</p><p>Esteu segur que voleu inhabilitar el controlador SATA?</p> + + + Disable + hard disk + Inhabilita + + + 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>. + 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>. + + + Failed to detach a hard disk image from device slot %1 on channel %2 of the %3 bus of the machine <b>%4</b>. + 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>. + + + Download + additions + Baixa + + + Mount + additions + Munta + + + <p>The host key is currently defined as <b>%1</b>.</p> + additional message box paragraph + <p>La tecla d'amfitrió es troba actualment definida com a <b>%1</b>.</p> + + + Capture + do input capture + Captura + + + <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>Check</b> to open the Virtual Disk Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p> + <p>Un o més dels discos durs virtuals, CD/DVD o disquet no es troben actualment accessibles. Això significa que no podreu treballar amb les màquines virtuals que els facen servir fins que estiguen accessibles.</p><p>Premeu <b>Comprova</b> per obrir la finestra del Gestor de Disc Virtual i comprovar quins medis es troben inaccessibles, o premeu <b>Ignora</b> per ignorar este missatge.</p> + + + Check + inaccessible media message box + Comprova + + + <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> + <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 alçat al disc. Premeu:</p><ul><li><b>Alça</b> per alçar ara els fitxers auto-convertits (ja no serà possible fer servir estos 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 d'alçar-los en el nou format;</li><li><b>Cancel·la</b> per no alçar 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 s'alçaran 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 este cas <b>no</b> es faran còpies de seguretat.</p> + + + &Save + warnAboutAutoConvertedSettings message box + De&sa + + + &Backup + warnAboutAutoConvertedSettings message box + &Còpia de seguretat + + + Cancel + warnAboutAutoConvertedSettings message box + Cancel·la + + + Switch + fullscreen + Canvia + + + Switch + seamless + Canvia + + + <p>Do you really want to reset the virtual machine?</p><p>This will cause any unsaved data in applications running inside it to be lost.</p> + <p>Segur que voleu reinicializar la màquina virtual?</p><p>Quan la màquina es reinicialitza, les dades no alçades de totes les aplicacions a dins es perdran.</p> + + + Reset + machine + Reinicialitza + + + Continue + no hard disk attached + Continua + + + Go Back + no hard disk attached + Vés arrere + + + Failed to copy file <b><nobr>%1</nobr></b> to <b><nobr>%2</nobr></b> (%3). + No s'ha pogut copiar el fitxer <b><nobr>%1</nobr></b> a <b><nobr>%2</nobr></b> (%3). + + + <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> + <p>Hi ha discos durs disponibles que no es fan servir per a la nova adjunció creada.</p><p>Prmeu el botó <b>Crea</b> per iniciar el gestor de <i>Creació de disc durs virtuals</i> i crear un nou disc dur, o premeu el botó <b>Selecciona</b> per obrir el <i>Gestor de Discs Durs</i> i seleccionar què fer.</p> + + + &Create + hard disk + &Crea + + + Select + hard disk + Selecciona + + + <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> + <p>No es pot entrar al mode fluid degut a que no hi ha suficient memòria de vídeo.</p><p>Heu de configurar la màquina virtual per tal que tinga almenys <b>%1</b> de memòria de vídeo.</p> + + + <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> + <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> + + + <p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p> + <p>No es pot obtindre informació de noves versions degut a un problema amb la xarxa:</p><p><b>%1</b></p> + + + You are already running the most recent version of VirtualBox. + Ja teniu instal·lada la darrera versió del VirtualBox. Proveu més tard. + + + <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> + <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>capturi</b> el punter del ratolí (només en cas que la integració del ratolí no estiga 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;. Esta icona indica si el teclat i el ratolí estan en estat de captura o no.</p> + + + <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> + <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 estiga activa i farà que el teclat no estiga disponible per a altres aplicacions que s'estiguen 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;. Esta icona indica si el teclat i el ratolí estan en estat de captura o no.</p> + + + <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> + <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í estiga 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> + + + <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> + <p>La màquina virtual passarà ara al mode de <b>pantalla completa</b>. Podeu tornar arrere 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> + + + <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> + <p>La màquina virtual passarà ara al mode <b>fluid</b>. Podeu tornar arrere 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> + + + &Contents... + &Continguts... + + + Show the online help contents + Mostra els continguts d'ajuda en línia + + + &VirtualBox Web Site... + Lloc web de &VirtualBox... + + + Open the browser and go to the VirtualBox product web site + Obri el navegador i vés al lloc web del producte VirtualBox + + + &Reset All Warnings + &Reinicia tots els avisos + + + Go back to showing all suppressed warnings and messages + Fa que tots els avisos i missatges suprimits es mostren una altra vegada + + + R&egister VirtualBox... + R&egistreu-vos al VirtualBox... + + + Open VirtualBox registration form + Obri el formulari de registre del VirtualBox + + + C&heck for Updates... + &Comprova si hi ha actualitzacions... + + + Check for a new VirtualBox version + Comprova si hi ha una nova versió de VirtualBox + + + &About VirtualBox... + &Quant a VirtualBox... + + + Show a dialog with product information + Mostra un diàleg amb la informació del producte + + + <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> + <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 directametn des d'este enllaç: </p><p><a href=%2>%3</a></p> + + + <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> + <p>Esteu segur que voleu alliberar el %1 <nobr><b>%2</b></nobr>?</p><p>Això el desconnectarà de les següents màquines virtuals: <b>%3</b>.</p> + + + 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. + 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. + + + The following files already exist:<br /><br />%1<br /><br />Are you sure you want to replace them? Replacing them will overwrite their contents. + Ja existeixen els següents fitxers: <br /><br />%1<br /><br />Esteu segur que voleu reemplaçar-los? Si els reemplaceu se sobreescriuran els continguts. + + + Failed to remove the file <b>%1</b>.<br /><br />Please try to remove the file yourself and try again. + We don't use "&" in Catalan. + No es pot eliminar el fitxer <b>%1</b>.<br /><br />Elimineu el fitxer i proveu novament. + + + You are running a prerelease version of VirtualBox. This version is not suitable for production use. + Esteu fent servir una versió en desenvolupament del VirtualBox. Esta versió no és recomanable per a entorns de producció. + + + 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. + 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. + + + 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. + Esteu tractant de tancar el sistema client amb el botó ACPI. Això no és possible actualment perquè el sistema client no fa servir el subsistema ACPI. + + + <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> + <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 una CPU de 64 bits i no podrà iniciar-se.</p><p>Assegureu-vos que heu habilitat VT-x/AMD-V correctament a la BIOS del vostre ordinador.</p> + + + Close VM + Tanca la màquina virtual + + + Continue + Continua + + + <p>Are you sure you wish to delete the selected snapshot and saved state?</p> + <p>Esteu segur que voleu eliminar la captura seleccionada i l'estat alçat?</p> + + + Discard + Descarta + + + Cancel + Cancel·la + + + Release + detach medium + Allibera + + + <p>Are you sure you want to remove the %1 <nobr><b>%2</b></nobr> from the list of known media?</p> + <p>Esteu segur que voleu eliminar el %1 <nobr><b>%2</b></nobr> de la llista de suports coneguts?</p> + + + Note that as this hard disk is inaccessible its storage unit cannot be deleted right now. + Tingueu en compte que este disc dur és innaccessible i per tant no es pot esborrar el seu contigut. + + + 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. + El següent diàleg vos permetrà triar si voleu eliminar també la unitat d'emmagatzematge d'este disc dur o mantindre-la per a més avant. + + + <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> + <p>Tingueu en compte que la unitat d'emmagatzematge d'este medi no s'eliminarà i, a més serà possible afegir-la novament més tard.</p> + + + Remove + medium + Elimina + + + <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> + <p>L'ubicació de de disc dur d'emmagatzematge <b>%1</b> ja existeix. No podeu crear un disc dur nou virtual que faça servir la mateixa ubicació perquè ja està fent-se servir per un altre disc dur virtual.</p><p>Especifiqueu una ubicació diferent.</p> + + + <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> + <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. Esta operació <b>no pot desfer-se</b>.</p><p>Si seleccioneu <b>Manté</b>, el disc dur s'eliminarà del llistat de disc durs coneguts, però la unitat d'emmagatzematge no s'eliminarà de forma que podreu afegir-la a este disc dur novament més tard.</p> + + + Delete + hard disk storage + Suprimeix + + + Keep + hard disk storage + Manté + + + Failed to delete the storage unit of the hard disk <b>%1</b>. + No s'ha pugt eliminar la unitat del disc dur <b>%1</b>. + + + <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> + <p>Existeixen discos durs connectats als ports del controlador addicional. Si desactiveu el controlador addicional, tots estos discos durs es desconnectaran automàticament.</p><p>Esteu segur que voleu desactivar el controlador addicional?</p> + + + <p>There are hard disks attached to ports of the additional controller. If you change the additional controller, all these hard disks will be automatically detached.</p><p>Are you sure you want to change the additional controller?</p> + <p>Existeixen discos durs connectats als ports del controlador addicional. Si canvieu el controlador addicional, tots estos discos durs es desconnectaran automàticament.</p><p>Esteu segur que voleu canviar el controlador addicional?</p> + + + Change + hard disk + Canvia + + + <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> + <p>Hi ha discos durs disponibles que no es fan servir per a la nova adjunció creada.</p><p>Premeu el botó <b>Crea</b> per iniciar el gestor de <i>Creació de disc durs virtuals</i> i crear un nou disc dur, o premeu el botó <b>Selecciona</b> per obrir el <i>Gestor de Discs Durs</i> i seleccionar què fer.</p> + + + Failed to create the hard disk storage <nobr><b>%1</b>.</nobr> + No s'ha pogut crear el disc dur <nobr><b>%1</b>.</nobr> + + + Failed to attach the hard disk <nobr><b>%1</b></nobr> to slot <i>%2</i> of the machine <b>%3</b>. + 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>. + + + Failed to detach the hard disk <nobr><b>%1</b></nobr> from slot <i>%2</i> of the machine <b>%3</b>. + 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>. + + + Failed to mount the %1 <nobr><b>%2</b></nobr> on the machine <b>%3</b>. + No s'ha pogut muntar %1 <nobr><b>%2</b></nobr> a la màquina <b>%3</b>. + + + Failed to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>. + No s'ha pogut desmuntar el %1 <nobr><b>%2</b></nobr> de la màquina <b>%3</b>. + + + Failed to open the %1 <nobr><b>%2</b></nobr>. + No s'ha pogut obrir el %1 <nobr><b>%2</b></nobr>. + + + Failed to close the %1 <nobr><b>%2</b></nobr>. + No s'ha pogut tancar el %1 <nobr><b>%2</b></nobr>. + + + Failed to determine the accessibility state of the medium <nobr><b>%1</b></nobr>. + No s'ha pogut accedir a l'estat del suport <nobr><b>%1</b></nobr>. + + + <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> + <p>Voleu suprimir la interfície de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Esta interfície potser s'estiga fent servir per un o més adaptadors de xarxa d'esta o altra màquina virtual. Després de suprimir-los, estos adaptadors no podran treballar fins que corregiu els paràmetres triant un nom d'interfície diferent o un tipus diferent d'adaptador.</p> + + + Failed to create the host-only network interface. + No s'ha pogut crear una interfície de xarxa de només l'amfitrió. + + + <p>Failed to connect to the VirtualBox online registration service due to the following error:</p><p><b>%1</b></p> + <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> + + + <p>Unable to obtain the new version information due to the following error:</p><p><b>%1</b></p> + <p>No es pot obtindre informació de noves versions degut al següent problema:</p><p><b>%1</b></p> + + + <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> + <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 facen servir fins que estiguen 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 este missatge.</p> + + + <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> + <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>Ix</b> si voleu tancar el VirtualBox sense realitzar més accions.</p> + + + <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> + <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 obtindre més informació sobre quins fitxers es convertiran i accedir a accions addicionals.</p><p>Premeu <b>Ix</b> per tancar l'apliació del VirtualBox sense alçar els resultats de la conversió al disc.</p> + + + &More + warnAboutAutoConvertedSettings message box + &Més + + + E&xit + warnAboutAutoConvertedSettings message box + &Ix + + + <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> + <p>Eliminant esta xarxa de només l'amfitrió suposarà l'eliminació de la interfície de només amfitrió en la que està basada. Voleu eliminar esta interfície (de només l'amfitrió) <nobr><b>%1</b>?</nobr></p><p><b>Nota: esta 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, estos 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> + + + <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> + <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 alçat al disc. Premeu:</p><ul><li><b>Alça</b> per alçar ara els fitxers auto-convertits (ja no serà possible fer servir estos 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 d'alçar-los en el nou format;</li><li><b>Sobreescriu</b> per alçar 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> + + + <li><b>Exit</b> to terminate VirtualBox without saving the results of the conversion to disk.</li> + <li><b>Ix</b> tancant el VirtualBox sense alçar els resultats de la conversió del disc.</li> + + + O&verwrite + warnAboutAutoConvertedSettings message box + Sob&reescriu + + + <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> + <p>S'ha produït un error crític mentre s'executava la màquina virtual, que s'ha aturat.</p><p>Per obtindre 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 recomanable prémer <b>D'acord</b>.</p> + + + Failed to open appliance. + No s'ha pogut obrir l'aplicació virtual. + + + Failed to open/interpret appliance <b>%1</b>. + No s'ha pogut obrir/interpretar l'aplicació virtual <b>%1</b>. + + + Failed to import appliance <b>%1</b>. + No s'ha pogut importar l'aplicació virtual <b>%1</b>. + + + Failed to create appliance. + No s'ha pogut crear l'aplicació virtual. + + + Failed to prepare the export of the appliance <b>%1</b>. + No s'ha pogut preparar l'exportació de l'aplicació virtual <b>%1</b>. + + + Failed to create an appliance. + No s'ha pogut crear una aplicació virtual. + + + Failed to export appliance <b>%1</b>. + No s'ha pogut exportar l'aplicació virtual <b>%1</b>. + + + hard disk + failed to close ... + disc dur + + + CD/DVD image + failed to close ... + Imatge de CD/DVD + + + floppy image + failed to close ... + imatge de disquet + + + A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents. + Ja existeix un fitxer amb el nom <b>%1</b>. Esteu segur que voleu reemplaçar-lo?<br /><br />En fer-ho se sobreescriurà el seu contingut. + + + <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> + <p>S'ha activat l'acceleració per maquinari VT-x/AMD-V, però no és operativa. Alguns clients (ex. OS/2 i QNX) requereixen esta característica.</p><p>Assegureu-vos que heu activat correctament VT-x/AMD-V a la BIOS del vostre ordinador.</p> + + + <p>Invalid e-mail address or password specified.</p> + <p>S'ha especificat una adreça de correu o contrasenya invàlids.</p> + + + <p>Failed to register the VirtualBox product.</p><p>%1</p> + <p>No s'ha pogut registrar el producte VirtualBox.</p><p>%1</p> + + + Failed to check files. + No s'han pogut comprovar els fitxers. + + + Failed to remove file. + No s'ha pogut eliminar el fitxer. + + + 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. + Pareix que el sistema de fitxers USBFS està muntat a /sys/bus/usb/drivers. És molt recomanable que canvieu això ja que és una configuració que pot fer que els dispositius USB fallin de maneres imprevisibles. + + + You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use. + Esteu executant una versió EXPERIMENTAL del VirtualBox. Esta versió no és recomanable per a entorns de producció. + + + <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> + <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> + + + Restore + Restaura + + + <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> + <p>Si s'esborra una captura, la informació d'estat alçada a la mateixa es perdrà i les dades del disc, repartides en diversos arxius d'imatges 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> + + + Delete + Suprimeix + + + Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>. + No s'ha pogut restaurar la captura <b>%1</b> de la màquina virtual <b>%2</b>. + + + Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>. + No s'ha pogut eliminar la captura <b>%1</b> de la màquina virtual <b>%2</b>. + + + <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> + <p>Hi ha suports disponibles que no es fan servir per a la nova adjunció creada.</p><p>Prmeu el botó <b>Crea</b> per iniciar el gestor de <i>Creació de disc durs virtuals</i> i crear un nou suport, o premeu el botó <b>Selecciona</b> per obrir el <i>Gestor de suports virtuals</i>.</p> + + + &Create + medium + &Crea + + + &Select + medium + &Selecciona + + + <p>There are no unused media available for the newly created attachment.</p><p>Press the <b>Select</b> if you wish to open the <i>Virtual Media Manager</i>.</p> + <p>No hi ha cap suport disponible que no es faça servir per a la nova adjunció.</p><p>Premeu <b>Selecciona</b> si voleu obrir el <i>Gestor de suports virtuals</i>.</p> + + + Failed to attach the %1 to slot <i>%2</i> of the machine <b>%3</b>. + No es pot connectar %1 de la ranura <i>%2</i> de la màquina <b>%3</b>. + + + Failed to detach the %1 from slot <i>%2</i> of the machine <b>%3</b>. + No es pot desconnectar %1 de la ranura <i>%2</i> de la màquina <b>%3</b>. + + + Unable to mount the %1 <nobr><b>%2</b></nobr> on the machine <b>%3</b>. + No es pot muntar el %1 <nobr><b>%2</b></nobr> a la màquina <b>%3</b>. + + + Would you like to force mounting of this medium? + Voleu forçar el muntatge d'este suport? + + + Unable to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>. + No es pot desmuntar el %1 <nobr><b>%2</b></nobr> de la màquina <b>%3</b>. + + + Would you like to force unmounting of this medium? + Voleu forçar el desmuntatge d'este mitjà? + + + Force Unmount + Força el desmuntatge + + + 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. + No s'ha pogut extreure el disc del dispositiu virtual. Probablement estiga bloquejat pel sistema operatiu client. Comproveu-ho i proveu novament. + + + <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> + <p>No es pot inserir la imatge del cd instal·lador de les Guest Additions a la màquina virtual <b>%1</b> si la màquina no té dispositius CD/DVD. Afegiu un dispositiu fent servir la pestanya de discos durs als paràmetres de la màquina.</p> + + + E&xit + warnAboutSettingsAutoConversion message box + &Ix + + + <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> + <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>Ix</b> si voleu tancar el VirtualBox sense realitzar més accions.</p> + + + hard disk + failed to mount ... + disc dur + + + CD/DVD + failed to mount ... host-drive + CD/DVD + + + CD/DVD image + failed to mount ... + imatge de CD/DVD + + + floppy + failed to mount ... host-drive + disquet + + + floppy image + failed to mount ... + imatge de disquet + + + hard disk + failed to attach ... + disc dur + + + CD/DVD device + failed to attach ... + dispositiu CD/DVD + + + floppy device + failed to close ... + disquetera + + + <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> + <p>Segur que voleu eliminar el dispositiu de CD/DVD?</p><p>No podreu muntar cap CD o imatges iso ni tampoc instal·lar les Guest Additions sense ell.</p> + + + &Remove + medium + &Elimina + + + + VBoxProgressDialog + + &Cancel + &Cancel·la + + + Time remaining: %1 + Temps restant: %1 + + + %1 days, %2 hours remaining + Resten %1 dies i %2 hores + + + %1 days, %2 minutes remaining + Resten %1 dies i %2 minuts + + + %1 days remaining + Resten %1 dies + + + 1 day, %1 hours remaining + Resta 1 dia i %1 hores + + + 1 day, %1 minutes remaining + Resta 1 dia i %1 minuts + + + 1 day remaining + Resta 1 dia + + + %1 hours, %2 minutes remaining + Resten %1 hores i %2 minuts + + + 1 hour, %1 minutes remaining + Resta 1 hora i %1 minuts + + + 1 hour remaining + Resta 1 hora + + + %1 minutes remaining + Resten %1 minuts + + + 1 minute, %2 seconds remaining + Resten 1 minut i %2 segons + + + 1 minute remaining + Resta 1 minut + + + %1 seconds remaining + Resten %1 segons + + + A few seconds remaining + Resten alguns segons + + + Canceling... + S'està cancel·lant... + + + Cancel the current operation + Cancel·la l'operació actual + + + %1, %2 remaining + You may wish to translate this more like "Time remaining: %1, %2" + Resta %1, %2 + + + %1 remaining + You may wish to translate this more like "Time remaining: %1" + Resta %1 + + + + VBoxRegistrationDlg + + Check this box if you do not want to receive mail from innotek at the e-mail address specified above. + Marqueu esta casella si no voleu rebre correus d'innotek a l'adreça de correu especificada. + + + &Confirm + &Confirma + + + Connection timed out. + S'ha superat el temps d'espera. + + + Could not locate the registration form on the server (response: %1). + No es pot localitzar el formulari de registre al servidor (resposta: %1). + + + &E-mail + Corr&eu + + + Enter your full name using Latin characters. + Introduïu el nom complet fent servir caràcters llatins. + + + Enter your e-mail address. Please use a valid address here. + Introduïu una adreça de correu vàlida. + + + &Name + &Nom + + + &Please do not use this information to contact me + &No feu servir esta informació per contactar amb mi + + + <p>Please fill out this registration form to let vos 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> + <p>Ompliu este formulari de registre per fer-nos saber que fas servir el VirtualBox i, opcionalment, per mantindre'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 esta 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> + + + VirtualBox Registration Dialog + Diàleg de registre del VirtualBox + + + Welcome to the VirtualBox Registration Form! + Benvingut al formulari de registre del VirtualBox! + + + Could not perform connection handshake. + No s'ha pogut dur a terme la conformitat de connexió. + + + <p>Please fill out this registration form to let vos 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> + <p>Ompliu este formulari de registre per deixar-nos conèixer que feu servir el VirtualBox i, opcionalment, per mantindre-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 esta 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> + + + Check this box if you do not want to receive mail from Sun Microsystems at the e-mail address specified above. + Marqueu esta casella si no voleu rebre informació de Sun Microsystems a l'adreça que heu especificat. + + + C&onfirm + C&onfirma + + + Cancel + Cancel·la + + + Select Country/Territory + Seleccioneu un país/territori + + + <p>Please fill out this registration form to let vos 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> + <p>Ompliu este formulari de registre per permetre'ns conèixer que feu servir el VirtualBox i, opcionalment, mantindre-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 esta 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> + + + I &already have a Sun Online account: + Ja tinc un compte a &Sun Online: + + + &E-mail: + Corr&eu: + + + &Password: + &Contrasenya: + + + I &would like to create a new Sun Online account: + Vull &registrar-me creant un nou compte a Sun Online: + + + &First Name: + &Nom: + + + &Last Name: + &Cognoms: + + + &Company: + C&ompanyia: + + + Co&untry: + &País: + + + E-&mail: + Corre&u: + + + P&assword: + Con&trasenya: + + + Co&nfirm Password: + Confirmeu la contrasen&ya: + + + &Register + &Registra + + + + VBoxSFDialog + + Cancel + Cancel·la + + + Help + Ajuda + + + &OK + D'ac&ord + + + Shared Folders + Carpetes compartides + + + + VBoxScreenshotViewer + + Screenshot of %1 (%2) + Captura de pantalla de %1 (%2) + + + Click to view non-scaled screenshot. + Cliqueu per veure la captura de pantalla sense escalar. + + + Click to view scaled screenshot. + Cliqueu per veure la captura de pantalla escalada. + + + + VBoxSelectorWnd + + &About VirtualBox... + &Quant a VirtualBox... + + + Go back to showing all suppressed warnings and messages + Fa que tots els avisos i missatges eliminats es tornen a mostrar + + + Close application + Tanca l'aplicació + + + Configure the selected virtual machine + Configura la màquina virtual seleccionada + + + &Contents... + &Continguts... + + + Create a new virtual machine + Crea una màquina virtual nova + + + Ctrl+D + Ctrl+D + + + Ctrl+G + Ctrl+G + + + Ctrl+L + Ctrl+L + + + Ctrl+N + Ctrl+N + + + Ctrl+Q + Ctrl+Q + + + Ctrl+R + Ctrl+R + + + Ctrl+S + Ctrl+S + + + Delete + Suprimeix + + + &Delete + &Suprimeix + + + Delete the selected virtual machine + Suprimeix la màquina virtual seleccionada + + + D&escription + D&escripció + + + D&escription * + D&escripció * + + + &Details + &Detalls + + + Discard + Descarta + + + D&iscard + Descar&ta + + + Discard the saved state of the selected virtual machine + Descarta l'estat alçat de la màquina virtual seleccionada + + + Display the global settings dialog + Mostra el diàleg de paràmetres globals + + + Display the Virtual Disk Manager dialog + Mostra el diàleg del gestor de discos virtuals + + + E&xit + &Ix + + + F1 + F1 + + + &File + &Fitxer + + + <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> + <h3>Benvinguts a VirtualBox!</h3><p>A la part esquerra d'esta finestra es mostra un llistat de totes les màquines virtuals a l'ordinador. Este 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'esta finestra.</p><p>Podeu prémer la tecla <b>%1</b> per obtindre ajuda o bé visitar <a href=http://www.virtualbox.org>www.virtualbox.org</a> per veure altra informació i novetats.</p> + + + &Help + &Ajuda + + + innotek VirtualBox + innotek VirtualBox + + + &Machine + &Màquina + + + New + Nova + + + &New... + &Nova... + + + Open the browser and go to the VirtualBox product web site + Obri el navegador i vés a la pàgina web del producte VirtualBox + + + Open VirtualBox registration form + Obri el formulari de registre de VirtualBox + + + &Preferences... + global settings + &Preferències... + + + Refresh + Refresca + + + &Refresh + &Refresca + + + Refresh the accessibility state of the selected virtual machine + Refresca l'estat d'accessibilitat de la màquina virtual seleccionada + + + R&egister VirtualBox... + R&egistra VirtualBox... + + + &Reset All Warnings + &Reinicia Tots els Avisos + + + Settings + Paràmetres + + + &Settings... + Paràmetre&s... + + + S&how + Mo&stra + + + Show + Mostra + + + Show a dialog with product information + Mostra un diàleg amb la informació del producte + + + Show Log... + Mostra Registre... + + + Show &Log... + Mostra el &registre... + + + Show the log files of the selected virtual machine + Mostra els fitxers de registre de la màquina virtual seleccionada + + + Show the online help contents + Mostra els continguts d'ajuda en línia + + + &Snapshots + &Captures + + + S&tart + Ini&cia + + + Start + Inicia + + + Start the selected virtual machine + Inicia la màquina virtual seleccionada + + + Switch to the window of the selected virtual machine + Canvia a la finestra de la màquina virtual seleccionada + + + VirtualBox OSE + VirtualBox OSE + + + &VirtualBox Web Site... + Lloc Web de &VirtualBox... + + + Virtual &Disk Manager... + Gestor de &Discs Virtuals... + + + R&esume + R&eprèn + + + Resume + Reprén + + + Ctrl+P + Ctrl+P + + + Resume the execution of the virtual machine + Reprén l'execució de la màquina virtual + + + &Pause + &Pausa + + + Pause + Pausa + + + Suspend the execution of the virtual machine + Suspèn l'execució de la màquina virtual + + + <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> + <h3>Benvingut a VirtualBox!</h3><p>A la part esquerra d'esta finestra es mostra un llistat de totes les màquines virtuals a l'ordinador. Este 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'esta finestra.</p><p>Podeu prémer la tecla <b>%1</b> per obtindre ajuda o bé visitar <a href=http://www.virtualbox.org>www.virtualbox.org</a> per veure altra informació i novetats.</p> + + + &Virtual Media Manager... + Gestor de suports &virtuals... + + + Sun VirtualBox + Sun VirtualBox + + + Display the Virtual Media Manager dialog + Mostra el diàleg del gestor de suports virtuals + + + &Import Appliance... + &Importa una aplicació virtual... + + + Import an appliance into VirtualBox + Importa una aplicació virtual al VirtualBox + + + &Export Appliance... + &Exporta una aplicació virtual... + + + Export one or more VirtualBox virtual machines as an appliance + Exporta una aplicació virtual d'una màquina virtual del VirtualBox + + + Re&fresh + Re&fresca + + + Log + icon text + Registre + + + + VBoxSettingsDialog + + <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>. + <i>Seleccioneu una categoria de paràmetres en la llista de l'esquerra i deplaceu el ratolí sobre un element de la dreta per obtindre'n més informació<i>. + + + On the <b>%1</b> page, %2 + A la pàgina <b>%1</b>, %2 + + + Invalid settings detected + S'han detectat paràmetres no vàlids + + + Settings + Paràmetres + + + Non-optimal settings detected + No s'han seleccionat els paràmetres òptims + + + + VBoxSharedFoldersSettings + + Add a new shared folder (Ins) + Afig una nova carpeta compartide (Ins) + + + Adds a new shared folder definition. + Afig una nova definició a la carpeta compartida. + + + Del + Supr + + + Edits the selected shared folder definition. + Edita la definició de la carpeta compartida seleccionada. + + + Edit the selected shared folder (Space) + Edita la carpeta compartida seleccionada (Espai) + + + Ins + Ins + + + Machine Folders + Carpetes de la màquina virtual + + + Name + Nom + + + <nobr>Name:&nbsp;&nbsp;%1</nobr><br><nobr>Path:&nbsp;&nbsp;%2</nobr> + <nobr>Nom:&nbsp;&nbsp;%1</nobr><br><nobr>Ruta:&nbsp;&nbsp;%2</nobr> + + + Path + Ruta + + + <qt>Lists all shared folders accessible to this machine. +Use +<tt>net use x: \\vboxsvr\share</tt> +to access a shared folder named <i>share</i> from a DOS-like OS, or +<tt>mount -t vboxsf share mount_point</tt> +to access it from a Linux OS. This feature requires Guest Additions.</qt> + <qt>Mostra totes les carpetes accessibles a esta 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. Esta característica requereix Guest Additions.</qt> + + + Removes the selected shared folder definition. + Suprimeix la definició de la carpeta compartida seleccionada. + + + Remove the selected shared folder (Del) + Suprimeix la carpeta compartida seleccionada (Supr) + + + Shared &Folders + Carpetes &Compartides + + + Space + Espai + + + Transient Folders + Carpetes transitòries + + + VBoxSharedFoldersSettings + don't translate + VBoxSharedFoldersSettings + + + Access + Accés + + + Ctrl+Space + Ctrl+Espai + + + Edit the selected shared folder (Ctrl+Space) + Edita la carpeta compartida seleccionada (Ctrl+Espai) + + + Full + Complet + + + Read-only + Només lectura + + + + VBoxSnapshotDetailsDlg + + Cancel + Cancel·la + + + &Description + &Descripció + + + Details of %1 (%2) + Detalls de %1 (%2) + + + F1 + F1 + + + Help + Ajuda + + + &Machine Details + Detalls de la &màquina + + + &Name + &Nom + + + &OK + &D'acord + + + Snapshot Details + Detalls de Captura + + + VBoxSnapshotDetailsDlg + VBoxSnapshotDetailsDlg + + + Snapshot Details + Detalls de la captura + + + Click to enlarge the screenshot. + Cliqueu per ampliar la captura de pantalla. + + + &Name: + &Nom: + + + Taken: + Feta el: + + + &Description: + &Descripció: + + + D&etails: + &Detalls: + + + + VBoxSnapshotsWgt + + %1 since %2 + Current State (time or date + time) + %1 des de %2 + + + Ctrl+Shift+B + Ctrl+Shift+B + + + Ctrl+Shift+D + Ctrl+Shift+D + + + Ctrl+Shift+R + Ctrl+Shift+R + + + Ctrl+Shift+S + Ctrl+Shift+S + + + (current, + Snapshot details + (actual, + + + Current State + Current State (Unmodified) + Estat actual + + + Current State (changed) + Current State (Modified) + Estat actual (modificat) + + + curStateActionGroup + curStateActionGroup + + + D&iscard Current Snapshot and State + D&escarta la captura i l'estat actuals + + + Discard Current Snapshot and State + Descarta la captura i l'estat actual + + + Discard Snapshot + Descarta la captura + + + &Discard Snapshot + &Descarta la captura + + + Discard the current snapshot and revert the machine to the state it had before the snapshot was taken + Descarta la captura actual i torna la màquina a l'estat en què es trobava abans que s'haguera fet + + + Discard the selected snapshot of the virtual machine + Descarta la captura seleccionada de la màquina virtual + + + offline) + Snapshot details + fora de línia) + + + online) + Snapshot details + en línia) + + + Restore the virtual machine state from the state stored in the current snapshot + Restaura l'estat de la màquina virtual des de l'estat emmagatzemat a la captura actual + + + Revert to Current Snapshot + Torna a la captura actual + + + &Revert to Current Snapshot + To&rna a la captura actual + + + Show Details + Mostra els detalls + + + S&how Details + Mostra els &detalls + + + Show the details of the selected snapshot + Mostra els detalls de la captura seleccionada + + + [snapshot] + [captura] + + + Snapshot %1 + Captura %1 + + + snapshotActionGroup + snapshotActionGroup + + + Space + Espai + + + Take a snapshot of the current virtual machine state + Fes una captura de l'estat actual de la màquina virtual + + + Taken at %1 + Snapshot (time) + Feta el %1 + + + Taken on %1 + Snapshot (date + time) + Feta el %1 + + + Take &Snapshot + Fe&s una captura + + + Take Snapshot + Fes una captura + + + The current state differs from the state stored in the current snapshot + L'estat actual difereix de l'estat emmagatzemat a la captura actual + + + The current state is identical to the state stored in the current snapshot + L'estat actual és idèntic a l'estat emmagatzemat a la captura actual + + + VBoxSnapshotsWgt + VBoxSnapshotsWgt + + + Ctrl+Space + Ctrl+Espai + + + (%1) + (%1) + + + (%n day(s) ago) + + (fa %n dia) + (fa %n dies) + (fa %n dies) + + + + (%n hour(s) ago) + + (fa %n hora) + (fa %n hores) + (fa %n hores) + + + + (%n minute(s) ago) + + (fa %n minut) + (fa %n minuts) + (fa %n minuts) + + + + (%n second(s) ago) + + (fa %n segon) + (fa %n segons) + (fa %n segons) + + + + &Restore Snapshot + &Restaura la captura + + + &Delete Snapshot + &Elimina la captura + + + Restore the selected snapshot of the virtual machine + Restaura la captura seleccionada de la màquina virtual + + + Delete the selected snapshot of the virtual machine + Elimina la captura seleccionada de la màquina virtual + + + (%1 ago) + (fa %1) + + + + VBoxSwitchMenu + + %1 %2 + %1 %2 + + + Disable + Inhabilita + + + Enable + Habilita + + + + VBoxTakeSnapshotDlg + + Cancel + Cancel·la + + + F1 + F1 + + + Help + Ajuda + + + &OK + &D'acord + + + Snapshot &Description + &Descripció de la captura + + + Snapshot &Name + &Títol de la captura + + + Take Snapshot of Virtual Machine + Fes una captura de la màquina virtual + + + 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. + + Avís: esteu fent una captura d'una màquina que té %n imatge immutable connectada. Mentre treballeu amb esta captura, la imatge immutable no es reiniciarà per evitar la pèrdua de dades. + Avís: esteu fent una captura d'una màquina que té %n imatge immutables connectades. Mentre treballeu amb esta captura, les imatges immutables no es reiniciaran per evitar la pèrdua de dades. + Avís: esteu fent una captura d'una màquina que té %n imatge immutables connectades. Mentre treballeu amb esta captura, les imatges immutables no es reiniciaran per evitar la pèrdua de dades. + + + + + VBoxTextEditor + + Edit text + Edita el text + + + &Replace... + &Reemplaça... + + + Replaces the current text with the content of a file. + Reemplaça el text actual amb el contingut del fitxer proveït. + + + Text (*.txt);;All (*.*) + Text (*.txt);;Tot (*.*) + + + Select a file to open... + Seleccioneu un fitxer per obrir... + + + + VBoxTrayIcon + + Show Selector Window + Mostra el selector de finestra + + + Show the selector window assigned to this menu + Mostra el selector de finestra assignat a este menú + + + Hide Tray Icon + Amaga la icona de sistema + + + Remove this icon from the system tray + Elimina esta icona de la safata del sistema + + + &Other Machines... + tray menu + &Altres màquines... + + + + VBoxUSBFilterSettings + + &Action + &Acció + + + Any + remote + Qualsevol + + + Displays the filter name. + Mostra el nom del filtre. + + + &Manufacturer + &Fabricant + + + &Name + &Nom + + + No + remote + No + + + Por&t + Por&t + + + Pro&duct + Pro&ducte + + + &Product ID + ID del &producte + + + <qt>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>).</qt> + <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> + + + <qt>Defines the host USB port filter as an +<i>exact match</i> string. An empty string will match any +value.</qt> + <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> + + + <qt>Defines the manufacturer filter as an +<i>exact match</i> string. An empty string will match any +value.</qt> + <qt>Defineix el filtre del fabricant com una +cadena de <i>seqüència exacta</i>. Una cadena buida no +tindrà cap valor.</qt> + + + <qt>Defines the product 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.</qt> + <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> + + + <qt>Defines the product name filter as an +<i>exact match</i> string. An empty string will match any +value.</qt> + <qt>Defineix el filtre del nom del producte com una +cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor.</qt> + + + <qt>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.</qt> + <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 +tindrà cap valor.</qt> + + + <qt>Defines the serial number filter as an +<i>exact match</i> string. An empty string will match any +value.</qt> + <qt>Defineix el número de sèrie del filtre com una +cadena de <i>seqüència exacta</i>. Una cadena buida no +tindrà cap valor.</qt> + + + <qt>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.</qt> + <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> + + + <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>), +or both (<i>Any</i>).</qt> + <qt>Defineix on s'aplica este 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> + + + R&emote + R&emot + + + &Revision + &Revisió + + + &Serial No. + Número de &Sèrie. + + + VBoxUSBFilterSettings + don't translate + VBoxUSBFilterSettings + + + &Vendor ID + ID del &venedor + + + Yes + remote + + + + + VBoxUSBMenu + + <no devices available> + USB devices + <no hi ha dispositius disponibles> + + + No supported devices connected to the host PC + USB device tooltip + No hi ha dispositius suportats connectats a l'ordinador amfitrió + + + + VBoxUpdateDlg + + 1 day + 1 dia + + + 2 days + 2 dies + + + 3 days + 3 dies + + + 4 days + 4 dies + + + 5 days + 5 dies + + + 6 days + 6 dies + + + 1 week + 1 setmana + + + 2 weeks + 2 setmanes + + + 3 weeks + 3 setmanes + + + 1 month + 1 mes + + + Never + Mai + + + Connection timed out. + S'ha excedit el temps d'espera de la connexió. + + + Could not locate the latest version list on the server (response: %1). + No es pot localitzar el formulari de registre al servidor (resposta: %1). + + + Chec&k + Com&prova + + + &Close + Tan&ca + + + VirtualBox Update Wizard + Assistent d'acutliatzació del VirtualBox + + + Check for Updates + Comprova si hi ha actualitzacions + + + <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> + <p>Este 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 este assistent en qualsevol moment seleccionant <b>Comprova si hi ha actualitzacions...</b> al menú d'<b>Ajuda</b>.</p> + + + Cancel + Cancel·la + + + Summary + Resum + + + <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> + <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 directametn des d'este enllaç: </p><p><a href=%2>%3</a></p> + + + <p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p> + <p>No es pot obtindre informació de noves versions degut a un problema amb la xarxa:</p><p><b>%1</b></p> + + + You are already running the most recent version of VirtualBox. + Ja teniu instal·lada la darrera versió del VirtualBox. Proveu novament més tard. + + + <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> + <p>Este assistent connectarà amb el lloc web del VirtualBox i comprovarà si hi ha una versió més nova de VirtualBox. 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 este assistent en qualsevol moment seleccionant <b>Comprova si hi ha actualitzacions...</b> al menú d'<b>Ajuda</b>.</p> + + + + VBoxVMDescriptionPage + + Ctrl+E + Ctrl+E + + + Edit + Edita + + + Edit (Ctrl+E) + Edita (Ctrl+E) + + + No description. Press the Edit button below to add it. + Sense descripció. Premeu el botó Edita per afegir-ne una. + + + + VBoxVMDetailsView + + 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: + <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>Refresca</b> si voleu tornar a comprovar l'accessibilitat: + + + + VBoxVMFirstRunWzd + + &CD/DVD-ROM Device + Dispositiu &CD/DVD + + + CD/DVD-ROM Device + Dispositiu CD/DVD + + + First Run Wizard + Executa l'auxiliar d'inici + + + Floppy Device + Disquet + + + &Floppy Device + Dis&quet + + + &Host Drive + &Dispositiu amfitrió + + + Host Drive %1 + Dispositiu amfitrió %1 + + + &Image File + Fitxer d'&imatge + + + Media Source + Suport font + + + Media Type + Tipus de suport + + + <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> + <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>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> + <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'inicie novament el procés d'instal·lació. Podeu fer axiò seleccionat l'acció corresponent <b>Desmunta...</b> al menú <b>Dispositius.</b> + + + <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> + <p>Seleccioneu el suport que conté el sistema operatiu amb el qual voleu treballar. Este suport ha d'ésser arrencable, en altre cas el sistema no podrà iniciar-se.</p> + + + <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> + <p>Seleccioneu el suport que conté el programa de configuració del sistema operatiu amb el qual voleu treballar. Este suport ha d'ésser arrencable, en altre cas el sistema no podrà iniciar-se.</p> + + + <p>Select the type of media you would like to use for booting an operating system.</p> + <p>Seleccioneu el tipus de suport que voleu fer servir per iniciar un sistema operatiu.</p> + + + <p>Select the type of media you would like to use for installation.</p> + <p>Seleccioneu el tipus de suport que voleu fer servir per a la instal·lació dels elements mostrats.</p> + + + <p>You have selected the following media to boot an operating system from:</p> + <p>Heu seleccionat el següent suport per iniciar un sistema operatiu des de:</p> + + + <p>You have selected the following media to boot from:</p> + <p>Heu seleccionat el següent suport per iniciar des de:</p> + + + <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> + <p>Heu iniciat un nova màquina virtual per primera vegada. Este assistent vos 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'esta màquina virtual en este moment perquè encara no heu seleccionat un disc. Si això no és el que voleu, podeu cancel·lar l'execució d'este 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'este 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>Arrere</b> per tornar a la pàgina anterior. Podeu prémer també <b>Cancel·la</b> si voleu cancel·lar l'execució d'este assistent.</p> + + + <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> + <p>Heu iniciat un nova màquina virtual per primera vegada. Este assistent vos 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>Arrere</b> per tornar a la pàgina anterior. Podeu prémer també <b>Cancel·la</b> si voleu cancel·lar l'execució d'este assistent.</p> + + + Select Installation Media + Selecciona el suport d'instal·lació + + + Summary + Resum + + + <table><tr><td>Type:</td><td>%1</td></tr><tr><td>Source:</td><td>%2</td></tr></table> + <table><tr><td>Tipus:</td><td>%1</td></tr><tr><td>Font:</td><td>%2</td></tr></table> + + + VDM + VDM + + + Welcome to the First Run Wizard! + Benvingut a l'auxiliar d'inici! + + + < &Back + < &Arrere + + + &Next > + &Següent > + + + <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> + <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 torne a iniciar per tal que el procés d'instal·lació s'inicie 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> + + + &Finish + &Finalitza + + + Type + summary + Tipus + + + Source + summary + Font + + + Cancel + Cancel·la + + + + VBoxVMInformationDlg + + Session Information Dialog + Diàleg Informatiu de la Sessió + + + &Close + Tan&ca + + + %1 - Session Information + %1 - Informació de la sessió + + + &Details + &Detalls + + + &Runtime + &Temps d'execució + + + DMA Transfers + Transferències DMA + + + PIO Transfers + Transferències PIO + + + Data Read + Lectura de dades + + + Data Written + Escriptura de dades + + + Data Transmitted + Transmissió de dades + + + Data Received + Recepció de dades + + + Enabled + Activat + + + Disabled + Desactivat + + + Runtime Attributes + Atributs del temps d'execució + + + Screen Resolution + Resolució de pantalla + + + Hardware Virtualization + Virtualització per Maquinari + + + CD/DVD-ROM Statistics + Estadístiques CD/DVD + + + Network Adapter Statistics + Estadístiques de l'adaptador de xarxa + + + Adapter 1 + Adaptador 1 + + + Adapter 2 + Adaptador 2 + + + Adapter 3 + Adaptador 3 + + + Adapter 4 + Adaptador 4 + + + Not attached + No connectat + + + Hard Disks Statistics + Estadístiques de discos durs + + + Primary Master + Primari Mestre + + + Primary Slave + Primari Esclau + + + Secondary Master + Secundari Mestre + + + Secondary Slave + Secundari Esclau + + + Version %1.%2 + guest additions + Versió %1.%2 + + + Not Detected + guest additions + No detectat + + + Not Detected + guest os type + No detectat + + + Guest Additions + Guest Additions + + + Guest OS Type + Tipus de sistema client + + + Hard Disk Statistics + Estadístiques de discos durs + + + No Hard Disks + No hi ha cap disc dur + + + No Network Adapters + No hi ha cap adaptador de xarxa + + + Enabled + nested paging + Activat + + + Disabled + nested paging + Desactivat + + + Nested Paging + Paginació imbricada + + + VBoxVMInformationDlg + VBoxVMInformationDlg + + + Not Available + details report (VRDP server port) + No disponible + + + Storage Statistics + Estadístiques d'emmagatzematge + + + No Storage Devices + No hi ha cap dispositiu d'emmagatzematge + + + Network Statistics + Estadístiques de xarxa + + + + VBoxVMListBox + + Inaccessible + No s'hi pot accedir + + + <nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr> + VM tooltip (name, last state change, session state) + <nobr>%1<br></nobr><nobr>%2 des de %3</nobr><br><nobr>Sessió %4</nobr> + + + <nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr> + Inaccessible VM tooltip (name, last state change) + <nobr><b>%1</b><br></nobr><nobr>Inaccessible des de %2</nobr> + + + + VBoxVMListView + + Inaccessible + Inaccessible + + + <nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr> + VM tooltip (name, last state change, session state) + <nobr>%1<br></nobr><nobr>%2 des de %3</nobr><br><nobr>Sessió %4</nobr> + + + <nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr> + Inaccessible VM tooltip (name, last state change) + <nobr><b>%1</b><br></nobr><nobr>Inaccessible des de %2</nobr> + + + S&how + Mo&stra + + + Switch to the window of the selected virtual machine + Canvia a la finestra de la màquina virtual seleccionada + + + S&tart + Ini&cia + + + Start the selected virtual machine + Inicia la màquina virtual seleccionada + + + R&esume + R&eprèn + + + Resume the execution of the virtual machine + Reprén l'execució de la màquina virtual + + + &Pause + &Pausa + + + Suspend the execution of the virtual machine + Suspèn l'execució de la màquina virtual + + + + VBoxVMLogViewer + + %1 - VirtualBox Log Viewer + %1 - Visualitzador de registre del VirtualBox + + + Close + Tanca + + + F1 + F1 + + + &Find + &Cerca + + + Help + Ajuda + + + Log Viewer + Visutalitzador del registre + + + <p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p> + <p>No s'ha trobat cap fitxer de registre. Premeu el botó <b>Refresca</b> per tornar a escanejar la carpeta de registre <nobr><b>%1</b></nobr>.</p> + + + &Refresh + &Refresca + + + &Save + De&sa + + + Save VirtualBox Log As + Alça el registre de VirtualBox com a + + + + VBoxVMNetworkSettings + + &Attached to + &Connectat a + + + Ca&ble Connected + Fi&l Connectat + + + Controls how this virtual adapter is attached to the real network of the Host OS. + Controla la forma en què este adaptador virtual es connecta a la xarxa real del sistema amfitrió. + + + Displays the command executed to set up the TAP interface. + Mostra l'orde executada per engegar l'interfície TAP. + + + Displays the command executed to terminate the TAP interface. + Mostra l'orde exexutada per tancar la interfície TAP. + + + 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. + Mostra l'adreça MAC d'este 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. + + + Displays the name of the host interface selected for this adapter. + Mostra el nom de la interfície seleccionada de l'amfitrió per a este adaptador. + + + Displays the TAP interface name. + Mostra el nom de la intefície TAP. + + + &Enable Network Adapter + Habilita l'adaptador d&e xarxa + + + &File Descriptor + Descriptor del &fitxer + + + &Generate + &Genera + + + Generates a new random MAC address. + Genera una nova adreça MAC aleatòria. + + + Host Interface Settings + Paràmetres de la interfície de l'amfitrió + + + Indicates whether the virtual network cable is plugged in on machine startup or not. + Indica si el cable de la xarxa virtual està connectat a l'inici de la màquina virtual o no. + + + &Interface Name + Nom de la &interfície + + + &MAC Address + Adreça &MAC + + + Select + Selecciona + + + Selects the setup application. + Selecciona l'aplicació de configuració. + + + Selects the terminate application. + Selecciona l'aplicació de finalització. + + + Select TAP setup application + Selecciona l'aplicació de configuració de TAP + + + Select TAP terminate application + Selecciona l'aplicació de finalització de TAP + + + &Setup Application + &Configura l'aplicació + + + &Terminate Application + Finali&tza l'aplicació + + + VBoxVMNetworkSettings + VBoxVMNetworkSettings + + + When checked, plugs this virtual network adapter into the virtual machine. + Quan estiga marcat, s'activarà este adaptador de xarxa virtual a dins de la màquina virtual. + + + &Network Name + &Nom de la Xarxa + + + Adapter &Type + &Tipus d'Adaptador + + + Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine. + Selecciona el tipus d'adaptador de xarxa virtual. Segons el valor, VirtualBox proveirà diferent maquinari de xarxa per a la màquina virtual. + + + Displays the name of the internal network selected for this adapter. + Mostra el nom de la xarxa interna seleccionada per a este adaptador. + + + + VBoxVMParallelPortSettings + + VBoxVMParallelPortSettings + VBoxVMParal·lelPortParàmetres + + + &Enable Parallel Port + Habilita Port Paral·l&el + + + When checked, enables the given parallel port of the virtual machine. + Quan estiga marcat, s'habilitarà el port paral·lel de la màquina virtual. + + + Port &Number + &Número de Port + + + 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. + 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. + + + &IRQ + &IRQ + + + Displays the IRQ number of this parallel 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. + Mostra el número IRQ per a este port paral·lel. Valors vàlids són nombres enters en un rang des de <tt>0</tt> fins <tt>255</tt>. Valors més grans que <tt>15</tt> es faran servir si <b>IO APIC</b> es troba habilitat a esta màquina virtual. + + + I/O Po&rt + Po&rt E/S + + + 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>. + Mostra l'adreça base del port E/S per a este port paral·lel. Valors vàlids són nombres enters en un rang des de <tt>0</tt> fins <tt>0xFFFF</tt>. + + + Port &Path + Ruta del &Port + + + Displays the host parallel device name. + Mostra el nom del dispositiu paral·lel del sistema client. + + + + VBoxVMSerialPortSettings + + 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. + Controla el mode de treball d'este port sèrie. Si seleccioneu <b>Desconnectat</b>, el sistema client detectarà el port sèrie però no podrà operar amb ell. + + + &Create Pipe + &Crea Conducte + + + 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>. + Mostra l'adreça base del port d'E/S d'este port sèrie. Valors vàlids són nombres enters del rang des de <tt>0</tt> fins <tt>0xFFFF</tt>. + + + 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. + Mostra el número IRQ d'este 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 esta màquina virtual. + + + 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. + 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>. + + + 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. + 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. + + + &Enable Serial Port + Habilita &el Port Sèrie + + + 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. + Si està marcat, el conducte especificat al camp <b>Ruta del Port</b> es crearà per la màquina virtual quan s'inicie. En altre cas, la màquina virtual provarà de fer servir el conducte existent. + + + I/O Po&rt + Po&rt E/S + + + &IRQ + &IRQ + + + Port &Mode + &Mode del port + + + Port &Number + &Número de Port + + + Port &Path + Ruta del &port + + + VBoxVMSerialPortSettings + VBoxVMSerialPortSettings + + + When checked, enables the given serial port of the virtual machine. + Quan estiga marcat, s'habilitarà el port sèrie a la màquina virtual. + + + + VBoxVMSettingsAudio + + 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. + Quan estiga 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ó. + + + Enable &Audio + H&abilita l'àudio + + + Host Audio &Driver: + Controla&dor d'àudio de l'amfitrió: + + + 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. + Gestiona el controlador d'eixida de so. El <b>controlador d'àudio Nul</b> fa que el client veja una tarjeta de so, però l'accés a ella s'ignorarà. + + + Audio &Controller: + &Controlador d'àudio: + + + Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine. + Selecciona el tipus de la targeta de so virtual. Segons este valor, VirtualBox proveirà diferents dispositius de maquinari de so per al sistema client. + + + + VBoxVMSettingsCD + + Host CD/DVD drive is not selected + No s'ha seleccionat cap controlador de CD/DVD a l'amfitrió + + + CD/DVD image file is not selected + No s'ha seleccionat cap imatge de CD/DVD + + + 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. + Quan estiga marcat, es muntarà el suport especificat al controlador CD/DVD de la màquina virtual. Tingueu en compte que el controlador CD/DVD sempre està connectat al controlador secundari mestre IDE de la màquina. + + + &Mount CD/DVD Drive + &Munta la unitat CD/DVD + + + Mounts the specified CD/DVD drive to the virtual CD/DVD drive. + Munta el CD/DVD especificat al dispositiu virtual de CD/DVD. + + + Host CD/DVD &Drive + Controla&dor de CD/DVD de l'amfitrió + + + Lists host CD/DVD drives available to mount to the virtual machine. + Mostra els dispositius de CD/DVD disponibles per muntar a la màquina virtual. + + + 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. + Quan estiga marcat, es permetrà al client enviar ordes 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. + + + Enable &Passthrough + &Habilita Passthrough + + + Mounts the specified CD/DVD image to the virtual CD/DVD drive. + Munta la imatge de CD/DVD especificat al dispositiu virtual de CD/DVD. + + + &ISO Image File + Fitxer d'imatge &ISO + + + Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image. + Mostra el fitxer d'imatge que es muntarà al dispositiu virtual de CD/DVD i permet seleccionar de forma ràpida una imatge diferent. + + + Invokes the Virtual Disk Manager to select a CD/DVD image to mount. + Invoca el Gestor de Disc Durs Virtuals per seleccionar una imatge CD/DVD a muntar. + + + Invokes the Virtual Media Manager to select a CD/DVD image to mount. + Invoca el gestor de discos durs virtuals per seleccionar una imatge CD/DVD a muntar. + + + + VBoxVMSettingsDisplay + + 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. + 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. + + + <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;MB</qt> + + + &Video + &Vídeo + + + Video &Memory: + &Memòria de vídeo: + + + Controls the amount of video memory provided to the virtual machine. + Controla la quantitat de memòria de vídeo amb què es proveeix a la màquina virtual. + + + MB + MB + + + Extended Features: + Característiques avançades: + + + When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host. + Quan estiga marcat, la màquina virtual permetrà l'accés als gràfics 3D disponibles a l'amfitrió. + + + Enable &3D Acceleration + Activa l'acceleració &3D + + + &Remote Display + Pantalla &remota + + + 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. + Quan estiga 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 estiga en execució) fent servir un client estàndard RDP. + + + &Enable Server + &Habilita el servidor + + + Server &Port: + Port del &servidor: + + + Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value. + Mostra el nombre del port del servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte. + + + Authentication &Method: + &Mètode d'autenticació: + + + Defines the VRDP authentication method. + Defineix el mode d'autenticació del VRDP. + + + Authentication &Timeout: + &Temps d'autenticació: + + + Specifies the timeout for guest authentication, in milliseconds. + Especifica el temps d'autenticació del client, en milisegons. + + + you have assigned less than <b>%1</b> of video memory which is the minimum amount required for HD Video to be played efficiently. + heu assignat menys de <b>%1</b> per a la memòria de vídeo, que és la mínima quantitat que es requereix per reproduir Vídeo HD de forma eficient. + + + When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host. + Quan estiga marcat, la màquina virtual tindrà suport a les capacitatats d'acceleració de vídeo disponibles a l'amfitrió. + + + Enable &2D Video Acceleration + Activa l'acceleracio &2D + + + The VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP. + 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. + + + + VBoxVMSettingsDlg + + < + < + + + = + = + + + > + > + + + 0 + 0 + + + 1 + 1 + + + %1 on the <b>%2</b> page. + %1 a la <b>%2</b> pàgina. + + + 2 + 2 + + + 3 + 3 + + + 4 + 4 + + + 5 + 5 + + + 6 + 6 + + + 7 + 7 + + + 8 + 8 + + + 9 + 9 + + + Accepts (saves) changes and closes the dialog. + Accepta (alça) els canvis i tanca el diàleg. + + + Adapter %1 + network + Adaptador %1 + + + Add + Afig + + + Add Empty (Ins) + Afig Buti (Ins) + + + Add From (Alt+Ins) + Afegeis des de (Alt+Ins) + + + Adds a new host interface. + Afig una nova interfície amfitriona. + + + Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device. + Afig un nou filtre USB amb tots els camps inicialitzats a cadenes buides. Tingueu en compte que cada filtre ha de coincidir amb el dispositiu USB connectat. + + + Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC. + Afig un nou filtre USB amb tots els camps definits als valors del dispositiu USB seleccionat que es troba connectat al PC amfitrió. + + + &Advanced + &Avançat + + + Alt+Ins + Alt+Ins + + + #audio + #àudio + + + Audio + Àudio + + + Authentication &Method + &Mètode d'autenticació + + + Authentication &Timeout + &Temps d'autenticació excedit + + + Base &Memory Size + Mida de la &memòria RAM + + + &Basic + &Bàsic + + + Boo&t Order + &Orde d'inici + + + Cancel + Cancel·la + + + Cancels changes and closes the dialog. + Cancel·la els canvis i tanca el diàlig. + + + Category + Categoria + + + CD/DVD image file is not selected + No s'ha seleccionat cap imatge de CD/DVD + + + CD/DVD-ROM + CD/DVD-ROM + + + Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start. + 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'inicie. + + + Controls the amount of video memory provided to the virtual machine. + Controla la quantitat de memòria de vídeo amb què es proveeix a la màquina virtual. + + + Ctrl+Down + Ctrl+Avall + + + Ctrl+Up + Ctrl+Amunt + + + 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. + Defineix el mode de compartició del porta-retalls entre el client i l'amfitrió. Tingueu en compte que esta característica requereix tindre instal·lades les Guest Additions al sistema client. + + + Defines the VRDP authentication method. + Defineix el mode d'autenticació del VRDP. + + + Del + Supr + + + &Description + &Descripció + + + Displays the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS. + Mostra la descripció de la màquina virtual. El camp de descripció és útil per comentar els detalls de configuració del sistema client instal·lat. + + + Displays the dialog help. + Mostra el diàleg d'ajuda. + + + Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image. + Mostra el fitxer d'imatge que es muntarà al dispositiu virtual de CD/DVD i permet seleccionar de forma ràpida una imatge diferent. + + + Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image. + Mostra el fitxer d'imatge que es muntarà al disquet virtual i permet seleccionar de forma ràpida una imatge diferent. + + + Displays the name of the virtual machine. + Mostra el nom de la màquina virtual. + + + Displays the operating system type that you plan to install into this virtual machine (called a guest operating system). + Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'esta màquina virtual (anomenat sistema operatiu client). + + + Displays the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space. + Mostra la ruta on les captures d'esta màquina virtual s'alçaran. Tingueu en compte que les captures poden ocupar prou quantitat d'espai al disc dur. + + + Displays the virtual hard disk to attach to this IDE slot and allows to quickly select a different hard disk. + Mostra el disc dur virtual per connectar esta ranura IDE i permet seleccionar ràpidament un disc dur diferent. + + + Duplicate port number selected + S'ha seleccionat un número de port duplicat + + + Duplicate port path entered + S'ha introduït una ruta de port duplicada + + + Enable A&CPI + Habilita A&CPI + + + &Enable Audio + H&abilita l'àudio + + + Enable IO A&PIC + Habilita IO A&PIC + + + &Enable Passthrough + &Habilita Passthrough + + + Enable &USB Controller + Habilita el controlador &USB + + + &Enable VRDP Server + Habilita &el servidor VRDP + + + Enable &VT-x/AMD-V + Habilita &VT-x/AMD-V + + + Extended Features + Característiques avançades + + + F1 + F1 + + + Floppy + Disquet + + + Floppy image file is not selected + No s'ha seleccionat cap imatge de disquet + + + General + General + + + Hard Disks + Discos durs + + + Help + Ajuda + + + Host Audio &Driver + Controla&dor d'àudio de l'amfitrió + + + Host CD/DVD &Drive + Controla&dor de CD/DVD de l'amfitrió + + + Host Floppy &Drive + &Disquet de l'amfitrió + + + Host &Interfaces + &Interfícies de l'amfitrió + + + [id] + [id] + + + &Identification + &Identificació + + + If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs. + Si està marcat, qualsevol canvi al CD/DVD o disquet muntat s'alçarà al fitxer de configuració per tal de preservar la configuració dels suports muntats entre cada execució de la màquina virtual. + + + &Image File + Fitxer d'&imatge + + + Incorrect host network interface is selected + S'ha seleccionat una interfície de xarxa de l'amfitrió incorrecta + + + Ins + Ins + + + Invalid settings detected + S'han detectat paràmetres incorrectes + + + Invokes the Virtual Disk Manager to create a new or select an existing virtual hard disk to attach. + Invoca el Gestor de Disc Durs Virtuals per crear un de nou o seleccionar un disc dur existent per connectar. + + + Invokes the Virtual Disk Manager to select a CD/DVD image to mount. + Invoca el Gestor de Disc Durs Virtuals per seleccionar una imatge CD/DVD a muntar. + + + Invokes the Virtual Disk Manager to select a Floppy image to mount. + Invoca el Gestor de discos durs virtuals per seleccionar una imatge de disquet a muntar. + + + <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>. + <i>Seleccioneu una categoria de configuració de la llista de l'esquerra i moveu el ratolí sobre l'ítem de paràmetres per obtindre més informació</i>. + + + &ISO Image File + Fitxer d'imatge &ISO + + + [link] + [enllaç] + + + Lists all available host interfaces. + Mostra totes les interfícies de l'amfitrió disponibles. + + + Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. + Mostra tots els filtres USB d'esta màquina. La casella de selecció de l'esquerra defineix si un filtre concret és habilitat o no. + + + Lists host CD/DVD drives available to mount to the virtual machine. + Mostra els dispositius de CD/DVD disponibles per muntar a la màquina virtual. + + + Lists host Floppy drives available to mount to the virtual machine. + Mostra els dispositius de disquet disponibles per muntar a la màquina virtual. + + + MB + MB + + + &Mount CD/DVD Drive + &Munta la unitat CD/DVD + + + &Mount Floppy Drive + &Munta el disquet + + + Mounts the specified CD/DVD drive to the virtual CD/DVD drive. + Munta el CD/DVD especificat al dispositiu virtual de CD/DVD. + + + Mounts the specified CD/DVD image to the virtual CD/DVD drive. + Munta la imatge de CD/DVD especificat al dispositiu virtual de CD/DVD. + + + Mounts the specified Floppy image to the virtual Floppy drive. + Munta el disquet especificat al dispositiu de disquet virtual. + + + Mounts the specified host Floppy drive to the virtual Floppy drive. + Munta el disquet especificat de l'amfitrió al dispositiu de disquet virtual. + + + Move Down (Ctrl+Down) + Mou avall (Ctrl+Avall) + + + Moves the selected USB filter down. + Mou el filtre USB seleccionat avall. + + + Moves the selected USB filter up. + Mou el filtre USB seleccionat amunt. + + + Move Up (Ctrl+Up) + Mou amunt (Ctrl+Amunt) + + + [name] + [nom] + + + &Name + &Nom + + + Network + Xarxa + + + New Filter %1 + usb + Filtre nou %1 + + + <No suitable interfaces> + <No hi ha cap interfície funcional> + + + <not attached> + hard disk + <no connectat> + + + <not selected> + <no seleccionat> + + + &OK + D'ac&ord + + + OS &Type + &Tipus de SO + + + O&ther + Al&tre + + + Other &Settings + Altre&s Paràmetres + + + <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> + <p>Voleu suprimir la interfície de xarxa <nobr><b>%1</b> seleccionada?</nobr></p><p><b>Nota:</b>Esta interfície potser s'estiga fent servir per un o més adaptadors de xarxa d'esta o altra màquina virtual. Després de suprimir-los, estos adaptadors no podran treballar fins que corregiu els paràmetres triant un nom d'interfície diferent o un tipus diferent d'adaptador.</p> + + + Port %1 + serial ports + Port %1 + + + &Primary Master + &Primari Mestre + + + Primary Master hard disk is not selected + No s'ha seleccionat cap disc Primari Mestre + + + P&rimary Slave + P&rimari Esclau + + + Primary Slave hard disk is already attached to a different slot + El disc Primar Esclau ja està assignat a una ranura diferent + + + Primary Slave hard disk is not selected + No s'ha seleccionat el disc Primari Esclau + + + <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;Mb</qt> + + + <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> + <qt>Gestiona el controlador d'eixida de so. El <b>controlador d'àudio Nul</b> +fa que el client veja una tarjeta de so, però l'accés a ella s'ignorarà.</qt> + + + <qt>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</qt> + <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> + + + <qt>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!</qt> + <qt>Quan estiga 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 esta característica després d'haver instal·lat un Windows al sistema operatiu client!</qt> + + + <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 +this feature after having installed a Windows guest operating system!</qt> + <qt>Quan estiga marcat, la màquina virtual suportarà +l'Entrada Eixida APIC (ES APIC), que pot disminuir el rendiment de la màquina virtual. <b>Nota:</b> no inhabiliteu +esta característica després d'haver instal·lat un Windows al sistema operatiu client!</qt> + + + &Remember Media Mounted at Runtime + &Recorda els suports muntats en temps d'execució + + + Remote Display + Pantalla remota + + + Remove + Suprimeix + + + Remove (Del) + Suprimeix (Supr) + + + Removes the selected host interface. + Suprimeix la interfície amfitriona seleccionada. + + + Removes the selected USB filter. + Suprimeix el filtre USB seleccionat. + + + Reset + Reinicialitza + + + Resets the snapshot folder path to the default value. The actual default path will be displayed after accepting the changes and opening this dialog again. + Reinicia la ruta de la carpeta de captures al valor per defecte. La ruta actual per defecte es mostrarà acceptant els canvis i obrint novament este diàleg. + + + &Secondary (IDE 1) Slave + &Secundari (IDE 1) Esclau + + + Secondary Slave hard disk is already attached to a different slot + El disc Secundari Esclau ja està connectat a una ranura diferent + + + Secondary Slave hard disk is not selected + No s'ha seleccionat cap disc Secondari Esclau + + + Select + Selecciona + + + Selects the snapshot folder path. + Selecciona la ruta de la carpeta de captures. + + + #serialPorts + #Portssèrie + + + Serial Ports + Ports Sèrie + + + &Server Port + Port del &Servidor + + + - Settings + - Paràmetres + + + &Shared Clipboard + Porta-retall&s compartit + + + Shared Folders + Carpetes Compartides + + + S&napshot Folder + Carpeta de capture&s + + + Specifies the timeout for guest authentication, in milliseconds. + Especifica el temps d'espera per a la autenticació el client, en milisegons. + + + USB + USB + + + USB Device &Filters + &Filtres de dispositiu USB + + + VBoxVMSettingsDlg + VBoxVMSettingsDlg + + + &Video Memory Size + Mida de la memòria de &vídeo + + + VirtualBox Host Interface %1 + Interfície amfitriona %1 del VirtualBox + + + 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. + Quan estiga marcat, es permetrà al client enviar ordes 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. + + + When checked, attaches the specified virtual hard disk to the Master slot of the Primary IDE controller. + Quan estiga marcat, es connectarà el disc virtual especificat a la ranura Mestre del controlador IDE primari. + + + When checked, attaches the specified virtual hard disk to the Slave slot of the Primary IDE controller. + Quan estiga marcat, es connectarà el disc virtual especificat a la ranura Esclau del controlador IDE primari. + + + When checked, attaches the specified virtual hard disk to the Slave slot of the Secondary IDE controller. + Quan estiga marcat, es connectarà el disc virtual especificat a la ranura Esclau del controlador IDE secundari. + + + When checked, enables the virtual USB controller of this machine. + Quan estiga es marcat, habilitarà el controlador virtual USB d'esta màquina. + + + 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. + Quan estiga marcat, es muntarà el suport especificat al controlador CD/DVD de la màquina virtual. Tingueu en compte que el controlador CD/DVD sempre està connectat al controlador Secundari Mestre IDE de la màquina. + + + When checked, mounts the specified media to the Floppy drive of the virtual machine. + Quant estiga marcat, es muntarà el suport especificat al dispositiu de disquet de la màquina virtual. + + + 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. + Quan estiga 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 este paràmetre està determinat pel valor del paràmetre global. + + + 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. + Quan estiga 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ó. + + + 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. + Quan estiga marcat, la màquina virtual actuarà com un servidor Remote Desktop Protocol (RDP), permetent als clients remots connectar la màquina virtual (quan estiga executant-se) fent servir l'estàndard client RDP. + + + 00 + 00 + + + 01 + 01 + + + 02 + 02 + + + 03 + 03 + + + 04 + 04 + + + 05 + 05 + + + 08 + 08 + + + 10 + 10 + + + 09 + 09 + + + 06 + 06 + + + Parallel Ports + Ports Paral·lels + + + 07 + 07 + + + #parallelPorts + #Porsparal·lels + + + Enable PA&E/NX + Habilita PA&E/NX + + + <qt>When + checked, the Physical + Address Extension + (PAE) feature of the + host CPU will be + exposed to the virtual + machine.</qt> + + <qt>Quan +estigui marcat, la +característica d'Extensió +d'Adreça Física (PAE) +de la CPU del sistema +client s'exposarà a la +màquina virtual.</qt> + + + &IDE Controller Type + T&ipus de controlador IDE + + + Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. + Defineix el tipus del controlador virtual IDE. Segons este valor, VirtualBox proveirà diferents dispositius de maquinari IDE virtual per al sistema client. + + + Audio &Controller + &Controlador d'àudio + + + Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine. + Selecciona el tipus de la targeta de so virtual. Segons este valor, VirtualBox proveirà diferents dispositius de maquinari de so per al sistema client. + + + Enable USB &2.0 Controller + Habilita el controlador USB &2.0 + + + When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support. + Quan estiga marcat, s'habilitarà el controlador virtual USB EHCI per a esta màquina. El controlador USB EHCI proveeix de suport USB 2.0. + + + + <qt>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.</qt> + + +<qt>Llista tots els filtres USB +d'esta màquina. La casella de +seleccióde la dreta defineix què +filtre concret està activat o no. Feu +servir el menú de context o +els botons de la dreta per +afegir o eliminar filtres USB.</qt> + + + Add Empty Filter + &Afig un filtre buit + + + &Add Empty Filter + &Afig un filtre buit + + + + <qt>Adds a new USB filter with all fields initially set to + empty strings. Note that such a filter will match any attached USB + device.</qt> + + <qt>Afig un nou filtre USB amb tots els camps fixats com +a cadenes buides. Tingueu en compte que els filtres coincidiran +amb qualsevol dispositiu USB connectat.</qt> + + + Add Filter From Device + Afig un filtre des d'un dispositiu + + + A&dd Filter From Device + Afig un filtre des d'un &dispositiu + + + <qt>Adds a new USB filter with all fields set to the + values of the selected USB device attached to the host + PC.</qt> + + <qt>Afig un nou filtre USB amb tots els camps +fixats als valors del dispositu USB seleccionat connectat +al sistema amfitrió.</qt> + + + Remove Filter + Elimina el filtre + + + &Remove Filter + Elimina el filt&re + + + + <qt>Removes the highlighted USB filter.</qt> + + <qt>Elimina el filtre USB remarcat.</qt> + + + Move Filter Up + Mou el filtre amunt + + + &Move Filter Up + &Mou el filtre amunt + + + + <qt>Moves the highlighted USB filter up.</qt> + + <qt>Mou el filtre USB remarcat amunt.</qt> + + + Move Filter Down + Mou el filtre avall + + + M&ove Filter Down + M&ou el filtre avall + + + + <qt>Moves the highlighted USB filter down.</qt> + + <qt>Mou el filtre USB remarcat avall.</qt> + + + Internal network name is not set + No s'ha especificat un nom de xarxa intern + + + Port path not specified + No s'ha especificat una ruta al port + + + Port %1 + parallel ports + Port %1 + + + USBActionGroup + USBAccióGrup + + + General + General + + + Storage + Emmagatzematge + + + Hard Disks + Discos durs + + + CD/DVD-ROM + CD/DVD + + + Floppy + Disquet + + + Audio + Àudio + + + Network + Xarxa + + + Ports + Ports + + + Serial Ports + Ports en sèrie + + + Parallel Ports + Ports paral·lels + + + USB + USB + + + Shared Folders + Carpetes compartides + + + Remote Display + Pantalla remota + + + %1 - %2 + %1 - %2 + + + On the <b>%1</b> page, %2 + A la <b>%1</b> pàgina, %2 + + + System + Sistema + + + Display + Pantalla + + + 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. + heu seleccionat un tipus de sistema client de 64 bits. Amb estos tipus de clients es requereix maquinari de virtualització (VT-x/AMD-V), esta característica s'activarà automàticament. + + + 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. + heu seleccionat un tipus de sistema client de 64 bits. VirtualBox no suporta actualment més d'una CPU virtual per a clients de 64 bits executats en amfitrions de 32 bits. + + + you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled. + l'acceleració 2D està activada. Com que l'acceleració 2D només està suportada per clients Windows, es desactivarà este paràmetre. + + + + VBoxVMSettingsFD + + Host floppy drive is not selected + No s'ha seleccionat cap disquet a l'amfitrió + + + Floppy image file is not selected + No s'ha seleccionat cap imatge de disquet + + + When checked, mounts the specified media to the Floppy drive of the virtual machine. + Quant estiga marcat, muntarà el suport especificat al dispositiu de disquet de la màquina virtual. + + + &Mount Floppy Drive + &Munta el disquet + + + Mounts the specified host Floppy drive to the virtual Floppy drive. + Munta el disquet especificat de l'amfitrió al dispositiu de disquet virtual. + + + Host Floppy &Drive + &Disquet de l'amfitrió + + + Lists host Floppy drives available to mount to the virtual machine. + Mostra els dispositius de disquet disponibles per muntar a la màquina virtual. + + + Mounts the specified Floppy image to the virtual Floppy drive. + Munta el disquet especificat al dispositiu de disquet virtual. + + + &Image File + Fitxer d'&imatge + + + Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image. + Mostra el fitxer d'imatge que es muntarà al disquet virtual i permet seleccionar de forma ràpida una imatge diferent. + + + Invokes the Virtual Disk Manager to select a Floppy image to mount. + Invoca el Gestor de discos durs virtuals per seleccionar una imatge de disquet a muntar. + + + Invokes the Virtual Media Manager to select a Floppy image to mount. + Invoca el gestor de discos durs virtuals per seleccionar una imatge de disquet a muntar. + + + + VBoxVMSettingsGeneral + + 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. + 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. + + + 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. + 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). + + + 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. + existeix un sistema client de 64 bits assignat a esta màquina virtual que requereix tindre 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 esta característica s'habilitarà per defecte quan accepteu els paràmetres de la màquina virtual prement el botó D'acord. + + + <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;MB</qt> + + + Displays the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space. + Mostra la ruta on les captures d'esta màquina virtual s'alçaran. Tingueu en compte que les captures poden ocupar prou quantitat d'espai al disc dur. + + + &Basic + &Bàsic + + + Identification + Identificació + + + &Name: + &Nom: + + + Displays the name of the virtual machine. + Mostra el nom de la màquina virtual. + + + OS &Type: + &Tipus de SO: + + + Displays the operating system type that you plan to install into this virtual machine (called a guest operating system). + Mostra el tipus de sistema operatiu que voleu instal·lar a dins d'esta màquina virtual (anomenat sistema operatiu client). + + + Base &Memory Size + Mida de la &memòria base + + + Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start. + 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'inicie. + + + < + < + + + > + > + + + MB + MB + + + &Video Memory Size + Mida de la memòria de &vídeo + + + Controls the amount of video memory provided to the virtual machine. + Controla la quantitat de memòria de vídeo amb què es proveeix a la màquina virtual. + + + &Advanced + &Avançat + + + Boo&t Order: + &Orde d'inici: + + + 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. + Defineix l'orde 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'orde dels dispositius. + + + [device] + [dispositiu] + + + Move Up (Ctrl-Up) + Mou amunt (Ctrl+Fletxa amunt) + + + Moves the selected boot device up. + Mou amunt el dispositiu d'arrecada seleccionat. + + + Move Down (Ctrl-Down) + Mou avall (Ctrl+Fletxa avall) + + + Moves the selected boot device down. + Mou avall el dispositiu d'arrencada seleccionat. + + + Extended Features: + Característiques avançades: + + + 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! + Quan estiga 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 esta característica després d'haver instal·lat un Windows al sistema operatiu client! + + + Enable A&CPI + Habilita A&CPI + + + 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! + Quan estiga marcat, la màquina virtual suportarà l'entrada/eixida APIC (ES APIC), que pot reduir el rendiment de la màquina virtual. <b>Nota:</b> no inhabiliteu esta característica després d'haver instal·lat un Windows al sistema operatiu client! + + + Enable IO A&PIC + Habilita IO A&PIC + + + 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. + Quan estiga marcat, l'aplicació tractarà de fer ús del processador de l'amfitrió per habilitar extensions com Intel VT-x i AMD-V. + + + Enable &VT-x/AMD-V + Activa &VT-x/AMD-V + + + When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V. + Quan estiga marcat, la màquina virtual provarà de fer ús de l'extensió de paginació imbricada d'intel VT-x i AMD-V. + + + Enable Nested Pa&ging + Activa la pa&ginació imbricada + + + When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine. + Quan estiga marcat, la característica d'extensió d'adreça física (PAE) del processador de l'amfitrió s'exposarà a la màquina virtual. + + + Enable PA&E/NX + Habilita PA&E/NX + + + &Shared Clipboard: + Porta-retall&s compartit: + + + 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. + Defineix el mode de compartició del porta-retalls entre el client i l'amfitrió. Tingueu en compte que esta característica requereix tindre instal·lades les Guest Additions al sistema client. + + + Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. + Defineix el tipus del controlador virtual IDE. Segons este valor, VirtualBox proveirà diferents dispositius de maquinari IDE virtual per al sistema client. + + + &IDE Controller Type: + T&ipus de controlador IDE: + + + S&napshot Folder: + Carpeta de capture&s: + + + &Description + &Descripció + + + Displays the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS. + Mostra la descripció de la màquina virtual. El camp de descripció és útil per comentar els detalls de configuració del sistema client instal·lat. + + + &Other + Al&tre + + + If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs. + Si està marcat, qualsevol canvi al CD/DVD o disquet muntat s'alçarà al fitxer de configuració per tal de preservar la configuració dels suports muntats entre cada execució de la màquina virtual. + + + &Remember Mounted Media + &Recorda els suports muntats + + + Runtime: + Temps d'execució: + + + 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. + 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'esta manera no es deixa la suficient memòria per al sistema amfitrió. Seleccioneu una quantitat de memòria inferior. + + + 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. + 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'esta manera no es deixa la suficient memòria per al sistema amfitrió. Contineu pel vostre compte (no recomanable). + + + 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. + 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. + + + When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host. + Quan estiga marcat, la màquina virtual permetrà l'accés als gràfics 3D disponibles a l'amfitrió. + + + Enable &3D Acceleration + Activa l'acceleració &3D + + + Removable Media: + Suports extraïbles: + + + &Remember Runtime Changes + &Recorda els canvis en execució + + + Mini ToolBar: + Barra d'eines mini: + + + If checked, show the Mini ToolBar in Fullscreen and Seamless modes. + Si està marcat, mostra la barra d'eines mini als modes fluid i de pantalla completa. + + + Show In &Fullscreen/Seamless + Mostra en pantalla completa/&fluid + + + If checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen. + Si està marcat, mostra una barra d'eines petita a la part de dalt de la pantalla en lloc d'a la posició per defecte a la part de sota. + + + Show At &Top Of Screen + Mostra a la par&t de dalt de la pantalla + + + + VBoxVMSettingsHD + + No hard disk is selected for <i>%1</i> + No s'ha seleccionat cap disc dur per <i>%1</i> + + + <i>%1</i> uses the hard disk that is already attached to <i>%2</i> + <i>%1</i> fa servir el disc dur que es troba connectat a <i>%2</i> + + + &Add Attachment + &Afig una adjunció + + + &Remove Attachment + &Elimina una adjució + + + &Select Hard Disk + &Seleccioneu un disc dur + + + Adds a new hard disk attachment. + Afig una nova adjunció de disc dur. + + + Removes the highlighted hard disk attachment. + Elimina l'adjunció de disc dur remarcada. + + + Invokes the Virtual Disk Manager to select a hard disk to attach to the currently highlighted slot. + Invoca el Gestor de Disc Durs Virtuals per crear un de nou o seleccionar un disc dur existent per connectar. + + + 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. + Quan estiga marcat, s'habilitarà el controlador virtual SATA per a esta màquina. Tingueu en compte que no podeu connectar discos durs a ports SATA quan el controlador SATA no és actiu. + + + &Enable SATA Controller + Habilita &el controlador SATA + + + When checked, enables an additional virtual controller (either SATA or SCSI) of this machine. + Quan estiga marcat, habilitarà un controlador virtual addicional (SATA o SCSI) per a esta màquina. + + + &Enable Additional Controller + &Activa el controlador addicional + + + &Attachments + &Adjuncions + + + 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. + Mostra els discos durs connectats a esta 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. + + + Invokes the Virtual Media Manager to select a hard disk to attach to the currently highlighted slot. + Invoca el gestor de suports virtuals per crear un de nou o seleccionar un disc dur existent per connectar-lo a la ranura remarcada. + + + 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. + Si està marcat, mostrarà de forma diferenciada els discos durs connectats a les ranures en lloc d'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. + + + &Show Differencing Hard Disks + Mo&stra els discos durs diferenciats + + + IDE &Controller Type + Tipus de &controlador IDE + + + Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. + Defineix el tipus del controlador virtual IDE. Segons este valor, VirtualBox proveirà diferents dispositius de maquinari IDE virtual per al sistema client. + + + <nobr><b>%1</b></nobr><br><nobr>Bus:&nbsp;&nbsp;%2</nobr><br><nobr>Type:&nbsp;&nbsp;%3</nobr> + <nobr><b>%1</b></nobr><br><nobr>Bus:&nbsp;&nbsp;%2</nobr><br><nobr>Tipus:&nbsp;&nbsp;%3</nobr> + + + <nobr>Expand/Collapse&nbsp;Item</nobr> + <nobr>Expandeix/redueix&nbsp;element</nobr> + + + <nobr>Add&nbsp;Hard&nbsp;Disk</nobr> + <nobr>Afig&nbsp;disc&nbsp;dur</nobr> + + + <nobr>Add&nbsp;CD/DVD&nbsp;Device</nobr> + <nobr>Afig&nbsp;dispositiu&nbsp;CD/DVD</nobr> + + + <nobr>Add&nbsp;Floppy&nbsp;Device</nobr> + <nobr>Afig&nbsp;disquetera</nobr> + + + No hard disk is selected for <i>%1</i>. + No hi ha cap disc dur seleccionat per a <i>%1</i>. + + + <i>%1</i> uses a medium that is already attached to <i>%2</i>. + <i>%1</i> utilitza un suport que ja està connectat a <i>%2</i>. + + + Add Controller + Afig mòdul + + + Add IDE Controller + Afig mòdul IDE + + + Add SATA Controller + Afig mòdul SATA + + + Add SCSI Controller + Afig mòdul SCSI + + + Add Floppy Controller + Afig mòdul de disquetera + + + Remove Controller + Suprimeix el mòdul + + + Add Attachment + Afig una adjunció + + + Add Hard Disk + Afig disc dur + + + Add CD/DVD Device + Afig dispositiu CD/DVD + + + Add Floppy Device + Afig disquetera + + + Remove Attachment + Elimina l'adjunció + + + Adds a new controller to the end of the Storage Tree. + Afig un nou controlador al final de l'Arbre d'emmagatzematge. + + + Removes the controller highlighted in the Storage Tree. + Elimina el controlador realçat de l'Arbre d'emmagatzematge. + + + Adds a new attachment to the Storage Tree using currently selected controller as parent. + Afig una nova adjunció a l'Arbre d'emmagatzematge fent servir el controlador seleccionat actualment com a pare. + + + Removes the attachment highlighted in the Storage Tree. + Elimina l'adjunció realçada a l'Arbre d'emmagatzematge. + + + IDE Controller + Mòdul IDE + + + SATA Controller + Mòdul SATA + + + SCSI Controller + Mòdul SCSI + + + Floppy Controller + Mòdul de disquet + + + Hard &Disk: + &Disc dur: + + + &CD/DVD Device: + Dispositiu &CD/DVD: + + + &Floppy Device: + &Disquetera: + + + &Storage Tree + &Arbre d'emmagatzematge + + + Contains all storage controllers for this machine and the virtual images and host drives attached to them. + Conté tots els controladors per a esta màquina i les imatges virtual i controladors d'amfitrió connectats a elles. + + + Information + Informació + + + The Storage Tree can contain several controllers of different types. This machine currently has no controllers. + L'Arbre d'emmagatzematge pot contindre molts controladors de diferents tipus. Esta màquina encara no té cap controlador. + + + Attributes + Atributs + + + &Name: + &Nom: + + + Changes the name of the storage controller currently selected in the Storage Tree. + Canvia el nom del controlador d'emmagatzematge actualment seleccionat a l'Arbre d'emmagatzematge. + + + &Type: + &Tipus: + + + Selects the sub-type of the storage controller currently selected in the Storage Tree. + Selecciona el sub-tipus del controlador d'emmagatzematge actualment seleccionat a l'Arbre d'emmagatzematge. + + + S&lot: + &Ranura: + + + 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. + Selecciona la ranura al controlador d'emmagatzematge utilitzada per esta adjunció. Les ranures disponibles depenen del tipus del controlador i de les altres adjuncions. + + + Selects the virtual disk image or the host drive used by this attachment. + Selecciona la imatge de disc virtual o el controlador de l'amfitrió que fa servir per esta adjunció. + + + Opens the Virtual Media Manager to select a virtual image for this attachment. + Obri el Gestor de suports virtuals per a seleccionar una imatge virtual per a esta adjunció. + + + Open Virtual Media Manager + Obri el Gestor de suports virtuals + + + D&ifferencing Disks + D&iscs diferenciats + + + 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. + Quan estiga marc, permet a la màquina client enviar ordes 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. + + + &Passthrough + &Passthrough + + + Virtual Size: + Mida virtual: + + + Actual Size: + Mida real: + + + Size: + Mida: + + + Location: + Ubicació: + + + Type (Format): + Tipus (format): + + + Attached To: + Connectat a: + + + + VBoxVMSettingsNetwork + + no bridged network adapter is selected + no hi ha cap adaptador de xarxa en pont seleccionat + + + no internal network name is specified + no hi ha cap nom de xarxa interna especificat + + + no host-only network adapter is selected + no s'ha seleccionat cap adaptador de només l'amfitrió + + + Not selected + network adapter name + No seleccionat + + + Adapter + network + Adaptador + + + Not selected + adapter + No seleccionat + + + Network + internal + Xarxa + + + Not selected + network + No seleccionat + + + MAC Address + Adreça MAC + + + Not selected + address + No seleccionat + + + Cable + Cable + + + Connected + cable + Connectat + + + Not connected + cable + No connectat + + + Select TAP setup application + Selecciona l'aplicació de configuració de TAP + + + Select TAP terminate application + Selecciona l'aplicació de finalització de TAP + + + When checked, plugs this virtual network adapter into the virtual machine. + Quan estiga marcat, s'activarà este adaptador de xarxa virtual a dins de la màquina virtual. + + + &Enable Network Adapter + Habilita l'adaptador d&e xarxa + + + A&dapter Type: + &Tipus d'Adaptador: + + + Adapter &Type: + &Tipus d'adaptador: + + + Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine. + Selecciona el tipus d'adaptador de xarxa virtual. Segons el valor, el VirtualBox proveirà diferent maquinari de xarxa per a la màquina virtual. + + + &Attached to: + Connect&at a: + + + Controls how this virtual adapter is attached to the real network of the Host OS. + Controla la forma en què este adaptador virtual es connecta a la xarxa real del sistema amfitrió. + + + Open additional options dialog for current attachment type. + Obri el diàleg d'opcions addicionals per a l'actual tipus d'adjunció. + + + &Name: + &Nom: + + + 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. + 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>. + + + Open extended settings dialog for current attachment type. + Obri el diàleg de configuració ampliat per a l'actual tipus d'adjunció. + + + &Network Name: + &Nom de la Xarxa: + + + Displays the name of the internal network selected for this adapter. + Mostra el nom de la xarxa interna seleccionada per a este adaptador. + + + &MAC Address: + Adreça &MAC: + + + 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. + Mostra l'adreça MAC d'este 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. + + + Generates a new random MAC address. + Genera una nova adreça MAC aleatòria. + + + &Generate + &Genera + + + Indicates whether the virtual network cable is plugged in on machine startup or not. + Indica si el cable de la xarxa virtual està connectat a l'inici de la màquina virtual o no. + + + Ca&ble Connected + Fi&l Connectat + + + &Interface Name: + Nom de la &interfície: + + + Displays the TAP interface name. + Mostra el nom de la intefície TAP. + + + &Setup Application: + &Configura l'aplicació: + + + Displays the command executed to set up the TAP interface. + Mostra l'orde executada per engegar l'interfície TAP. + + + Selects the setup application. + Selecciona l'aplicació de configuració. + + + &Terminate Application: + Finali&tza l'aplicació: + + + Displays the command executed to terminate the TAP interface. + Mostra l'orde exexutada per tancar la interfície TAP. + + + Selects the terminate application. + Selecciona l'aplicació de finalització. + + + Host Interface Settings + Paràmetres de la interfície de l'amfitrió + + + A&dvanced + &Avançat + + + Shows or hides additional network adapter options. + Mostra o amaga les opcions addicionals de l'adaptador de xarxa. + + + &Mac Address: + Adreça &Mac: + + + &Cable connected + &Cable connectat + + + + VBoxVMSettingsNetworkDetails + + no bridged network adapter is selected + no hi ha cap adaptador de xarxa en pont seleccionat + + + no internal network name is specified + no hi ha cap nom de xarxa interna especificat + + + no host-only adapter is selected + no hi ha seleccionat cap adaptador de xarxa de només l'amfitrió + + + Basic Details + Detalls bàsics + + + Bridged Network Details + Detalls de la xarxa en pont + + + Internal Network Details + Detalls de la xarxa interna + + + Host-only Network Details + Detalls de la xarxa de només l'amfitrió + + + Not selected + No seleccionat + + + Host Settings + Paràmetres de l'amfitrió + + + &Bridged Network Adapter: + Adaptador de xarxa en &pont: + + + Displays the name of the host network adapter selected for bridged networking. + Mostra el nom de l'adaptador de xarxa seleccionat de l'amfitrió per a la xarxa en pont. + + + Internal &Network: + Xarxa i&nterna: + + + Displays the name of the internal network selected for this adapter. + Mostra el nom de la xarxa interna seleccionada per a este adaptador. + + + Host-only &Network Adapter: + Adaptador de xarxa de &només l'amfitrió: + + + Displays the name of the VirtualBox network adapter selected for host-only networking. + Mostra el nom de l'adaptador de xarxa VirtualBox seleccionat per a la xarxa de només l'amfitrió. + + + Guest Settings + Paràmetres del client + + + Additional Options + Opcions addicionals + + + Guest &MAC Address: + Adreça &MAC del client: + + + 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. + Mostra l'adreça MAC d'este 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. + + + Generates a new random MAC address. + Genera una nova adreça MAC aleatòria. + + + &Cable connected + &Cable connectat + + + Indicates whether the virtual network cable is plugged in on machine startup or not. + Indica si el cable de la xarxa virtual està connectat a l'inici de la màquina virtual o no. + + + + VBoxVMSettingsNetworkPage + + No host network interface is selected + No s'ha seleccionat cap interfície de xarxa + + + Internal network name is not set + No s'ha especificat un nom de xarxa intern + + + + VBoxVMSettingsParallel + + Port %1 + parallel ports + Port %1 + + + When checked, enables the given parallel port of the virtual machine. + Quan estiga marcat, s'habilitarà el port paral·lel de la màquina virtual. + + + &Enable Parallel Port + Habilita el port paral·l&el + + + Port &Number: + &Número del port: + + + 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. + 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. + + + &IRQ: + &IRQ: + + + Displays the IRQ number of this parallel 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. + Mostra el número IRQ per a este port paral·lel. Valors vàlids són nombres enters en un rang des de <tt>0</tt> fins <tt>255</tt>. Valors més grans que <tt>15</tt> es faran servir si <b>IO APIC</b> es troba habilitat a esta màquina virtual. + + + I/O Po&rt: + Po&rt E/S: + + + 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>. + Mostra l'adreça base del port E/S per a este port paral·lel. Valors vàlids són nombres enters en un rang des de <tt>0</tt> fins <tt>0xFFFF</tt>. + + + Port &Path: + Ruta del &port: + + + Displays the host parallel device name. + Mostra el nom del dispositiu paral·lel del sistema client. + + + 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. + Mostra el número IRQ d'este 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 esta màquina virtual. + + + 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>. + Mostra l'adreça base del port E/S d'este port paral·lel. Valors vàlids són nombres enters amb un rang entre <tt>0</tt> i <tt>0xFFFF</tt>. + + + + VBoxVMSettingsParallelPage + + Duplicate port number selected + S'ha seleccionat un número de port duplicat + + + Port path not specified + No s'ha especificat una ruta al port + + + Duplicate port path entered + S'ha introduït una ruta de port duplicada + + + + VBoxVMSettingsSF + + &Add New Shared Folder + &Afig una nova carpeta compartida + + + &Edit Selected Shared Folder + &Edita la carpeta compartida seleccionada + + + &Remove Selected Shared Folder + Elimina la ca&rpeta compartida seleccionada + + + Adds a new shared folder definition. + Afig una nova definició a la carpeta compartida. + + + Edits the selected shared folder definition. + Edita la definició de la carpeta compartida seleccionada. + + + Removes the selected shared folder definition. + Suprimeix la definició de la carpeta compartida seleccionada. + + + Machine Folders + Carpetes de la màquina virtual + + + Transient Folders + Carpetes transitòries + + + Full + Complet + + + Read-only + Només lectura + + + 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. + Mostra totes les carpetes accessibles a esta 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. Esta característica requereix les Guest Additions. + + + Name + Nom + + + Path + Ruta + + + Access + Accés + + + Global Folders + Carpetes globals + + + &Add Shared Folder + &Afig una carpeta compartida + + + &Edit Shared Folder + &Edita la carpeta compartida + + + &Remove Shared Folder + Elimina la ca&peta compartida + + + &Folders List + Llista de &carpetes + + + + VBoxVMSettingsSFDetails + + Add Share + Afig una compartició + + + Edit Share + Edita la compartició + + + Dialog + Diàleg + + + Folder Path: + Ruta cap a la carpeta: + + + Folder Name: + Nom de la carpeta: + + + Displays the name of the shared folder (as it will be seen by the guest OS). + Mostra el nom de la carpeta compartida (tal com es veu des del sistema operatiu client). + + + When checked, the guest OS will not be able to write to the specified shared folder. + Quan estiga marcat, el sistema operatiu client no podrà escriure a la carpeta compartida especificada. + + + &Read-only + &Només lectura + + + &Make Permanent + &Fes permanent + + + + VBoxVMSettingsSerial + + Port %1 + serial ports + Port %1 + + + When checked, enables the given serial port of the virtual machine. + Quan estiga marcat, s'habilitarà el port sèrie a la màquina virtual. + + + &Enable Serial Port + &Habilita el port sèrie + + + Port &Number: + &Número de Port: + + + 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. + 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. + + + &IRQ: + &IRQ: + + + 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. + Mostra el número IRQ d'este 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 esta màquina virtual. + + + I/O Po&rt: + Po&rt E/S: + + + 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>. + Mostra l'adreça base del port d'E/S d'este port sèrie. Valors vàlids són nombres enters del rang des de <tt>0</tt> fins <tt>0xFFFF</tt>. + + + Port &Mode: + &Mode del port: + + + 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. + Controla el mode de treball d'este port sèrie. Si seleccioneu <b>Desconnectat</b>, el sistema client detectarà el port sèrie però no podrà operar amb ell. + + + 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. + Si està marcat, el conducte especificat al camp <b>Ruta del port</b> es crearà per la màquina virtual quan s'inicie. En altre cas, la màquina virtual provarà de fer servir el conducte existent. + + + &Create Pipe + &Crea un conducte + + + Port &Path: + Ruta del &port: + + + 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. + 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>. + + + Port/File &Path: + Ruta al &port/fitxer: + + + 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. + Mostra el número IRQ d'este 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 esta màquina virtual. + + + 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>. + Mostra l'adreça base d'E/S d'este port en sèrie. Valors vàlids són nombres enter amb un rang entre <tt>0</tt> i <tt>0xFFFF</tt>. + + + + VBoxVMSettingsSerialPage + + Duplicate port number selected + S'ha seleccionat un número de port duplicat + + + Port path not specified + No s'ha especificat una ruta al port + + + Duplicate port path entered + S'ha introduït una ruta de port duplicada + + + + VBoxVMSettingsSystem + + 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. + 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. + + + 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. + 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). + + + 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. + per raons d'eficiència, el nombre de CPUs virtuals assignades a la màquina virtual no pot ser més del doble del nombre de CPUs físiques al sistema amfitrió (<b>%1</b>). Reduïu el nombre de CPUs virtuals. + + + 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. + heu assignat més CPUs virtuals a esta màquina virtual que el nombre de CPUs físiques al sistema amfitrió (<b>%1</b>). Això rebaixarà l'eficiència de la màquina virtual. Considereu reduir el nombre de CPUs virtuals. + + + 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. + hi ha més d'una CPU virtual assignada a esta màquina virtual, la qual requereix tindre la característica IO-APIC també activada, i l'SMP no podrà treballar, per la qual cosa esta característica s'activarà automàticament quan accepteu els paràmetres de la màquina virtual prement el botó D'acord. + + + 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. + hi ha més d'una CPU virtual assignada a esta màquina virtual, la qual requereix tindre la característica de virtualització VT-x/AMD-V també activada, i l'SMP no podrà treballar, per la qual cosa esta característica s'activarà automàticament quan accepteu els paràmetres de la màquina virtual prement el botó D'acord. + + + <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;MB</qt> + + + <qt>%1&nbsp;CPU</qt> + %1 is 1 for now + <qt>%1&nbsp;CPU</qt> + + + <qt>%1&nbsp;CPUs</qt> + %1 is 32 for now + <qt>%1&nbsp;CPUs</qt> + + + &Motherboard + Placa &mare + + + Base &Memory: + &Memòria base: + + + Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start. + 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'inicie. + + + MB + MB + + + &Boot Order: + &Orde d'inici: + + + 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. + Definiu l'orde 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'orde dels dispositius. + + + Move Down (Ctrl-Down) + Mou avall (Ctrl+Fletxa avall) + + + Moves the selected boot device down. + Mou avall el dispositiu d'arrencada seleccionat. + + + Move Up (Ctrl-Up) + Mou amunt (Ctrl+Fletxa amunt) + + + Moves the selected boot device up. + Mou amunt el dispositiu d'arrecada seleccionat. + + + Extended Features: + Característiques avançades: + + + 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! + Quan estiga 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 esta característica després d'haver instal·lat un Windows al sistema operatiu client! + + + Enable &ACPI + Habilita &ACPI + + + 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! + Quan estiga marcat, la màquina virtual suportarà l'entrada/eixida APIC (ES APIC), que pot reduir el rendiment de la màquina virtual. <b>Nota:</b> no inhabiliteu esta característica després d'haver instal·lat un Windows al sistema operatiu client! + + + Enable &IO APIC + Habilita &IO APIC + + + &Processor + &Processador + + + &Processor(s): + &Processador(s): + + + Controls the number of virtual CPUs in the virtual machine. + Controla el nombre de CPUs virtuals a la màquina virtual. + + + When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine. + Quan estiga marcat, la característica d'extensió d'adreça física (PAE) del processador de l'amfitrió s'exposarà a la màquina virtual. + + + Enable PA&E/NX + Habilita PA&E/NX + + + Acce&leration + Acce&l·leració + + + Hardware Virtualization: + Virtualització de maquinari: + + + 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. + Quan estiga marcat, l'aplicació tractarà de fer ús del processador de l'amfitrió per habilitar extensions com Intel VT-x i AMD-V. + + + Enable &VT-x/AMD-V + Activa &VT-x/AMD-V + + + When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V. + Quan estiga marcat, la màquina virtual provarà de fer ús de l'extensió de paginació imbricada d'intel VT-x i AMD-V. + + + Enable Nested Pa&ging + Activa la pa&ginació imbricada + + + <qt>%1&nbsp;CPUs</qt> + %1 is host cpu count * 2 for now + <qt>%1&nbsp;CPUs</qt> + + + 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. + Quan estiga marcat, el client tindrà suport per al Extended Firmware Interface (EFI), requerida per a iniciar alguns sistemes operatius. El sistemes que no facen servir EFI no podran iniciar-se si esta opció és activa. + + + Enable &EFI (special OSes only) + Activa &EFI (només SO especials) + + + + VBoxVMSettingsUSB + + &Add Empty Filter + &Afig un filtre buit + + + A&dd Filter From Device + Afig un filtre des d'un &dispositiu + + + &Edit Filter + &Edita el filtre + + + &Remove Filter + Elimina el filt&re + + + &Move Filter Up + &Mou el filtre amunt + + + M&ove Filter Down + M&ou el filtre avall + + + Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device. + Afig un filtre d'USB nou amb tots els camps definits inicialment com a cadenes buides. Tingueu en compte que un filtre com este concordarà amb qualsevol dispositiu USB connectat. + + + Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC. + Afig 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ó. + + + Edits the selected USB filter. + Edita el filtre d'USB seleccionat. + + + Removes the selected USB filter. + Elimina el filtre d'USB seleccionat. + + + Moves the selected USB filter up. + Mou amunt el filtre d'USB seleccionat. + + + Moves the selected USB filter down. + Mou avall el filtre d'USB seleccionat. + + + New Filter %1 + usb + Filtre nou %1 + + + When checked, enables the virtual USB controller of this machine. + Quan estiga marcat, s'habilitarà el controlador virtual USB d'esta màquina. + + + Enable &USB Controller + Habilita el controlador &USB + + + When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support. + Quan estiga marcat, s'habilitarà el controlador virtual USB EHCI per a esta màquina. El controlador USB EHCI proveeix de suport USB 2.0. + + + Enable USB 2.0 (E&HCI) Controller + Habilita el controlador USB &2.0 (E&HCI) + + + USB Device &Filters + &Filtres de dispositiu USB + + + 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. + Mostra tots els filtres USB d'esta 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. + + + [filter] + [filtre] + + + + VBoxVMSettingsUSBFilterDetails + + Any + remote + Qualsevol + + + Yes + remote + + + + No + remote + No + + + &Name: + &Nom: + + + Displays the filter name. + Mostra el nom del filtre. + + + &Vendor ID: + ID del &venedor: + + + 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. + 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. + + + &Product ID: + ID del &producte: + + + Defines the product 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. + Defineix el filtre ID 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. + + + &Revision: + &Revisió: + + + 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. + 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. + + + &Manufacturer: + &Fabricant: + + + Defines the manufacturer filter as an <i>exact match</i> string. An empty string will match any value. + Defineix el filtre del fabricant com una cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor. + + + Pro&duct: + Pro&ducte: + + + Defines the product name filter as an <i>exact match</i> string. An empty string will match any value. + Defineix el filtre de nom del producte com una cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor. + + + &Serial No.: + Número de &sèrie: + + + Defines the serial number filter as an <i>exact match</i> string. An empty string will match any value. + Defineix el filtre del número de sèrie com una cadena de <i>seqüència exacta</i>. Una cadena buida no tindrà cap valor. + + + Por&t: + Por&t: + + + Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value. + 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. + + + R&emote: + R&emot: + + + 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>). + Defineix on s'aplica este 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>). + + + &Action: + &Acció: + + + 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>). + 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>). + + + USB Filter Details + Detalls del filtre USB + + + + VBoxVMSettingsVRDP + + 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. + Quan estiga 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 estiga executant-se) fent servir l'estàndard client RDP. + + + &Enable VRDP Server + Habilita &el servidor VRDP + + + Server &Port: + Port del &servidor: + + + Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value. + Mostra el nombre del port del servidor VRDP. Heu d'especificar <tt>0</tt> (cero) per reiniciar el port al valor per defecte. + + + Authentication &Method: + &Mètode d'autenticació: + + + Defines the VRDP authentication method. + Defineix el mode d'autenticació del VRDP. + + + Authentication &Timeout: + &Temps d'autenticació: + + + Specifies the timeout for guest authentication, in milliseconds. + Especifica el temps d'espera per a la autenticació del client, en milisegons. + + + diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts index b02e79a87..6735fa8cf 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts @@ -1380,7 +1380,7 @@ p, li { white-space: pre-wrap; } &Auto show Dock && Menubar in fullscreen - + &Automatisk visning af Dok && Menubjælke i fuldskærm @@ -2788,49 +2788,49 @@ p, li { white-space: pre-wrap; } %n year(s) - - - + + %n år + %n år %n month(s) - - - + + %n måned + %n måneder %n day(s) - - - + + %n dag + %n dage %n hour(s) - - - + + %n time + %n timer %n minute(s) - - - + + %n minut + %n minutter %n second(s) - - - + + %n sekund + %n sekunder (CD/DVD) - + (CD/DVD) @@ -4372,12 +4372,12 @@ p, li { white-space: pre-wrap; } <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> - + <p>Er du sikker på at du vil fjerne CD/DVD-drevet?</p><p>Du vil ikke kunne montere CD/ISO-aftryk eller installere Gæstetilføjelserne uden det!</p> &Remove medium - + &Fje&rn @@ -4457,12 +4457,12 @@ p, li { white-space: pre-wrap; } %1, %2 remaining You may wish to translate this more like "Time remaining: %1, %2" - + %1, %2 tilbage %1 remaining You may wish to translate this more like "Time remaining: %1" - + %1 tilbage @@ -4963,7 +4963,7 @@ p, li { white-space: pre-wrap; } (%1 ago) - + (%1 siden) @@ -4993,9 +4993,9 @@ p, li { white-space: pre-wrap; } 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. - - - + + Advarsel: Du tager et øjebliksbillede af en kørende maskine, som har %n skrivebeskyttet aftryk tilsluttet. Så længe du arbejder på dette øjebliksbillede vil det skrivebeskyttede aftryk ikke blive nulstillet for at undgå tab af data. + Advarsel: Du tager et øjebliksbillede af en kørende maskine, som har %n skrivebeskyttede aftryk tilsluttet. Så længe du arbejder på dette øjebliksbillede vil de skrivebeskyttede aftryk ikke blive nulstillet for at undgå tab af data. diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts index d0c0471b3..a4a5c337e 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts @@ -4513,7 +4513,7 @@ p, li { white-space: pre-wrap; } (%1 ago) - (vor %1) + (vor %1) diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts index 2a2c4caa3..9ddb05ff3 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts @@ -125,7 +125,7 @@ Kernel driver not accessible - Controlador del kernel no accesibleble + Controlador del kernel no accesible Unknown error %2 during initialization of the Runtime @@ -595,19 +595,19 @@ Versión %1 Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr> - Descargando la imagen de CD de las adiciones del huésped desde <nobr><b>%1</b>...</nobr> + Descargando la imagen de CD de las «Guest Additions» desde <nobr><b>%1</b>...</nobr> Cancel the VirtualBox Guest Additions CD image download - Cancelar la descarga de la imagen de CD de las adiciones del huésped + Cancelar la descarga de la imagen de CD de las «Guest Additions» <p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p> - <p>No se puedo salvar el archivo descargado como <nobr><b>%1</b>.</nobr></p> + <p>No se puedo guardar el archivo descargado como <nobr><b>%1</b>.</nobr></p> Select folder to save Guest Additions image to - Seleccione la carpeta donde guardar la imagen de adiciones del huésped + Seleccione la carpeta donde guardar la imagen de las «Guest Additions» @@ -808,7 +808,7 @@ Versión %1 <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> - <p>Salva el estado actual de ejecución de la máquina virtual al disco duro físico del PC anfitrión.</p><p>La próxima vez que la máquina sea inicializada, será restuarada al estado guardado y continuará la ejecución en el mismo punto donde la guardó. Lo que le permitirá continuar con su trabajo inmediatamente.</p><p>Tenga en cuenta que guardar el estádo de la máquina puede tomar tiempo largo, dependiendo el tipo de sistema operativo huésped y la cantidad e memoria que se le asignó a la máquina virtual.</p> + <p>Guarda el estado actual de ejecución de la máquina virtual al disco duro físico del PC anfitrión.</p><p>La próxima vez que la máquina sea inicializada, será restuarada al estado guardado y continuará la ejecución en el mismo punto donde la guardó. Lo que le permitirá continuar con su trabajo inmediatamente.</p><p>Tenga en cuenta que guardar el estádo de la máquina puede tomar bastante tiempo, dependiendo el tipo de sistema operativo huésped y la cantidad de memoria que se le asignó a la máquina virtual.</p> <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> @@ -816,7 +816,7 @@ Versión %1 <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> - <p>Apága la máquina virtual.</p><p>Tenga en cuenta que está acción parará la ejecución de la máquina virtual inmediatamente. Esto puede ocasionar que el sistema operativo huésped no pueda efectuar un apagado limpio y haya <i>pérdida de datos</i> dentro de la máquina virtual. Sólo se recomienda usar esta opción cuando la máquina virtual no respode a la acción <b>Enviar señal de apagado</b>.</p> + <p>Apaga la máquina virtual.</p><p>Tenga en cuenta que está acción parará la ejecución de la máquina virtual inmediatamente. Esto puede ocasionar que el sistema operativo huésped no pueda efectuar un apagado limpio y haya <i>pérdida de datos</i> dentro de la máquina virtual. Sólo se recomienda usar esta opción cuando la máquina virtual no respode a la acción <b>Enviar señal de apagado</b>.</p> Restore the machine state stored in the current snapshot @@ -876,7 +876,7 @@ Versión %1 Automatically resize the guest display when the window is resized (requires Guest Additions) - Redimensiona la pantalla del huésped cuando se redimensiona la ventana (requiere instalar las aplicaciones «Guest Additions») + Redimensiona la pantalla del huésped cuando se redimensiona la ventana (requiere instalar las «Guest Additions») &Adjust Window Size @@ -993,11 +993,11 @@ Versión %1 &Install Guest Additions... - &Instalar aplicaciones «Guest Additions»... + &Instalar «Guest Additions»... Mount the Guest Additions installation image - Montar la imagen de las aplicaciones «Guest Additions» + Montar la imagen de las «Guest Additions» &Statistics... @@ -1397,11 +1397,11 @@ Versión %1 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. - Indica si la función de autodimensionar está habilitada (<img src=:/auto_resize_on_16px.png/>) or inhabilitada (<img src=:/auto_resize_off_16px.png/>). Esta función requiere instalar las aplicaciones «Guest Additions» en el SO huésped. + Indica si la función de autodimensionar está habilitada (<img src=:/auto_resize_on_16px.png/>) or inhabilitada (<img src=:/auto_resize_off_16px.png/>). Esta función requiere instalar las «Guest Additions» en el SO huésped. 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. - Indica si el puntero del ratón es capturado por el SO huésped:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;puntero no es capturado</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;puntero es capturado</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;Int. del ratón habilitada</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;Int. ratón deshabilitada, el ratón es capturado</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;Int. ratón deshabilitada, el ratón no es capturado</nobr><br> La integración del ratón requiere instalar las aplicaciones «Guest Additions» en el SO huésped. + Indica si el puntero del ratón es capturado por el SO huésped:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;puntero no es capturado</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;puntero es capturado</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;Int. del ratón habilitada</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>&nbsp;&nbsp;Int. ratón deshabilitada, el ratón es capturado</nobr><br><nobr><img src=:/mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;Int. ratón deshabilitada, el ratón no es capturado</nobr><br> La integración del ratón requiere instalar las «Guest Additions» en el SO huésped. Indicates whether the keyboard is captured by the guest OS (<img src=:/hostkey_captured_16px.png/>) or not (<img src=:/hostkey_16px.png/>). @@ -1463,7 +1463,7 @@ Versión %1 Unmount Floppy Device - Desmontar dispositvo de disquete + Desmontar dispositivo de disquete No CD/DVD Devices Attached @@ -1898,11 +1898,11 @@ Versión %1 Appliance Export Wizard - Asistente de Exportación de Servicio Virtualizado + Asistente de exportación de servicio virtualizado Welcome to the Appliance Export Wizard! - ¡Bienvenido al Asistente de Exportación de Servicio Virtualizado! + ¡Bienvenido al asistente de exportación de servicio virtualizado! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -1934,11 +1934,11 @@ p, li { white-space: pre-wrap; } Appliance Export Settings - Configuración de Exportación de Servicios Virtualizados + Configuración de exportación de servicios virtualizados 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. - Aqui puede cambiar los valores de configuración adicionales para la máquina virtual seleccionada. Puede modificar de las propiedades desplegadas haciendo doble clic sobre ellas. + Aquí puede cambiar los valores de configuración adicionales para la máquina virtual seleccionada. Puede modificar las propiedades desplegadas haciendo doble clic sobre ellas. Restore Defaults @@ -2170,7 +2170,7 @@ p, li { white-space: pre-wrap; } &Auto Capture Keyboard - &Auto capturar teclado + &Autocapturar teclado @@ -2599,7 +2599,7 @@ p, li { white-space: pre-wrap; } Nested Paging details report - Paginación anidadada + Paginación anidada Not Attached @@ -3682,7 +3682,7 @@ p, li { white-space: pre-wrap; } You can create media images using the virtual media manager. - Puede crear imágenes de medios usando el Administrador de Medios Virtuales. + Puede crear imágenes de medios usando el Administrador de medios virtuales. Attaching this hard disk will be performed indirectly using a newly created differencing hard disk. @@ -3692,7 +3692,7 @@ p, li { white-space: pre-wrap; } 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. medium - Algunos medios en esta cadena de disco duro son inaccesibles. Use el Administrador de Medios Virtuales en el modo <b>Mostrar discos duros diferenciados</b> para inspeccionar estos medios. + Algunos medios en esta cadena de disco duro son inaccesibles. Use el Administrador de medios virtuales en el modo <b>Mostrar discos duros diferenciados</b> para inspeccionar estos medios. This base hard disk is indirectly attached using the following differencing hard disk: @@ -4338,11 +4338,11 @@ volver al idioma por omisión del sistema.</qt> Appliance Import Wizard - Asistente de Importación de Servicio Virtualizado + Asistente de importación de servicio virtualizado Welcome to the Appliance Import Wizard! - ¡Bienvenido al Asistente de Importación de Servicio Virtualizado! + ¡Bienvenido al asistente de importación de servicio virtualizado! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -4374,7 +4374,7 @@ p, li { white-space: pre-wrap; } Appliance Import Settings - Configuración de Importación de Servicios Virtualizados + Configuración de importación de servicios virtualizados 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. @@ -4617,7 +4617,7 @@ p, li { white-space: pre-wrap; } Virtual Media Manager - Administrador de Medios Virtuales + Administrador de medios virtuales Hard &Disks @@ -4671,7 +4671,7 @@ p, li { white-space: pre-wrap; } Exit Full Screen or Seamless Mode - Salir del modo a pantalla competa o fluído + Salir del modo a pantalla completa o fluído Close VM @@ -4724,7 +4724,7 @@ p, li { white-space: pre-wrap; } VBoxNewHDWzd Create New Virtual Disk - Crear disco virtual nuevo + Crear nuevo disco virtual <p>This wizard will help you to create a new virtual hard disk image for your virtual machine.</p> @@ -4736,7 +4736,7 @@ y <b>Atrás</b> para regresar a la anterior.</p> Welcome to the Create New Virtual Disk Wizard! - ¡Bienvenido al Asistente para la Creación de un Nuevo Disco Virtual! + ¡Bienvenido al asistente para la creación de un nuevo disco virtual! <p>Select the type of virtual hard disk image you want to create.</p> @@ -4909,7 +4909,7 @@ dependiendo del tamaño de la imagen y el rendimiento de su disco duro.</p> <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> - <p>Este asistente le guiará para crear una nueva imagen de disco virtual para su máquina virtual.</p><p>Use el botón <b>Siguiente</b> para ir a la siguiente página del assitente y <b>Atrás</b> para regresar a la anterior.</p> + <p>Este asistente le ayudará a crear una nueva imagen de disco virtual para su máquina virtual.</p><p>Use el botón <b>Siguiente</b> para ir a la siguiente página del asistente y <b>Atrás</b> para regresar a la anterior.</p> Hard Disk Storage Type @@ -4960,7 +4960,7 @@ dependiendo del tamaño de la imagen y el rendimiento de su disco duro.</p> VBoxNewVMWzd Create New Virtual Machine - Crear Nueva Máquina Virtual + Crear nueva máquina virtual <p>This wizard will guide you through the steps that are necessary to create @@ -4974,7 +4974,7 @@ y <b>Atrás</b> para regresar a la anterior.</p> Welcome to the New Virtual Machine Wizard! - ¡Bienvenido al Asistente para la Creación de una Nueva Máquina Virtual! + ¡Bienvenido al asistente para la creación de una nueva máquina virtual! <p>Enter a name for the new virtual machine and select the type of the guest operating @@ -5119,7 +5119,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>Este asistente le guiará en los pasos necesarios para crear una nueva máquina virtual para VirtualBox.</p><p>Use el botón <b>Siguiente</b> para ir a la siguiente página del asistente y <b>Atrás</b> para regresar a la anterior.</p> + <p>Este asistente le guiará en los pasos necesarios para crear una nueva máquina virtual en VirtualBox.</p><p>Use el botón <b>Siguiente</b> para ir a la siguiente página del asistente y <b>Atrás</b> para regresar a la anterior.</p> < &Back @@ -5184,7 +5184,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>Seleccione la imagen de disco duro que será usada como disco de arranque. Puede crear un disco duro nuevo presionando en <b>Nuevo</b> o puede seleccionar un disco duro existente desde la lista desplegable o presionando el botón <b>Existentes</b> (invoca el Administrador de Medios Virtuales).</p><p>Si necesita una configuración más complicada de discos duros puede saltarse este paso y luego conectar los discos duros desde el diálogo de configuración de la máquina virtual.</p> + <p>Seleccione la imagen de disco duro que será usada como disco de arranque. Puede crear un disco duro nuevo presionando en <b>Nuevo</b> o puede seleccionar un disco duro existente desde la lista desplegable o presionando el botón <b>Existentes</b> (invoca el Administrador de medios virtuales).</p><p>Si necesita una configuración más complicada de discos duros puede saltarse este paso y luego conectar los discos duros desde el diálogo de configuración de la máquina virtual.</p> Boot Hard &Disk (Primary Master) @@ -5574,15 +5574,15 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>Las aplicaciones «Guest Additions» instaladas en el SO huésped son muy viejas: la versión instalada es %1. La versión esperada es %2. Algunas funcionalidades que requieren adiciones del huésped (integración del ratón, autoredimensionamiento de la pantalla huésped) probablemente dejarán de funcionar apropiadamente.</p><p>Actualice las aplicaciones «Guest Additions» a la versión más reciente eligiendo <b>Instalar aplicaciones «Guest Additions»<b> desde el menú <b>Dispositivos</b>.</p> + <p>Las «Guest Additions» instaladas en el SO huésped son muy viejas: la versión instalada es %1. La versión esperada es %2. Algunas funcionalidades que requieren adiciones del huésped (integración del ratón, autoredimensionamiento de la pantalla huésped) probablemente dejarán de funcionar apropiadamente.</p><p>Actualice las «Guest Additions» a la versión más reciente eligiendo <b>Instalar «Guest Additions»<b> desde el menú <b>Dispositivos</b>.</p> <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> - <p>Las aplicaciones «Guest Additions» instaladas en el SO huésped son muy viejas: la versión instalada es %1. La versión esperada es %2. Algunas funcionalidades que requieren adiciones del huésped (integración del ratón, autoredimensionamiento de la pantalla huésped) podrían dejarán de funcionar apropiadamente.</p><p>Se recomienda actualizar las aplicaciones «Guest Additions» a la versión más reciente eligiendo <b>Instalar aplicaciones «Guest Additions»<b> desde el menú <b>Dispositivos</b>.</p> + <p>Las «Guest Additions» instaladas en el SO huésped son muy viejas: la versión instalada es %1. La versión esperada es %2. Algunas funcionalidades que requieren adiciones del huésped (integración del ratón, autoredimensionamiento de la pantalla huésped) podrían dejarán de funcionar apropiadamente.</p><p>Se recomienda actualizar las «Guest Additions» a la versión más reciente eligiendo <b>Instalar «Guest Additions»<b> desde el menú <b>Dispositivos</b>.</p> <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> - <p>Las aplicaciones «Guest Additions» instaladas en el SO huésped son demasiado nuevas para esta versión de VirtualBox: la versión instalada es %1. La versión esperada es %2.</p><p>Utilizar una versión más nueva de las aplicaciones «Guest Additions» con una versión más vieja de VirtualBox no está soportado. Instale la versión de las aplicaciones «Guest Additions» correspondiete a esta versión de VirtualBox eligiendo <b>Instalar aplicaciones «Guest Additions»<b> desde el menú <b>Dispositivos</b>.</p> + <p>Las «Guest Additions» instaladas en el SO huésped son demasiado nuevas para esta versión de VirtualBox: la versión instalada es %1. La versión esperada es %2.</p><p>Utilizar una versión más nueva de las «Guest Additions» con una versión más vieja de VirtualBox no está soportado. Instale la versión de las «Guest Additions» correspondiete a esta versión de VirtualBox eligiendo <b>Instalar «Guest Additions»<b> desde el menú <b>Dispositivos</b>.</p> Failed to change the snapshot folder path of the virtual machine <b>%1<b> to <nobr><b>%2</b></nobr>. @@ -5598,19 +5598,19 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>No se pudo encontrar la imagen de CD las aplicaciones «Guest Additions» de VirtualBox <nobr><b>%1</b></nobr> o <nobr><b>%2</b>.</nobr></p><p>¿Desea descargar la imagen de este CD desde internet?</p> + <p>No se pudo encontrar la imagen de CD las «Guest Additions» de VirtualBox <nobr><b>%1</b></nobr> o <nobr><b>%2</b>.</nobr></p><p>¿Desea descargar la imagen de este CD desde internet?</p> <p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p> - <p>Fallo al descargar la imagen de CD de las aplicaciones «Guest Additions» de VirtualBox desde <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p> + <p>Fallo al descargar la imagen de CD de las «Guest Additions» de VirtualBox desde <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p> <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> - <p>¿Está seguro de que desea descargar la imagen de CD de las aplicaciones «Guest Additions» de VirtualBox desde <nobr><a href="%1">%2</a></nobr> (tamaño %3 bytes)?</p> + <p>¿Está seguro de que desea descargar la imagen de CD de las «Guest Additions» de VirtualBox desde <nobr><a href="%1">%2</a></nobr> (tamaño %3 bytes)?</p> <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> - <p>La imagen de CD de las aplicaciones «Guest Additions» de VirtualBox fue descargada con éxito desde <nobr><a href="%1">%2</a></nobr> y guardada localmente como <nobr><b>%3</b>.</nobr></p><p>¿Desea registrar esta imágen de CD y montarla in la unidad de CD/DVD virtual?</p> + <p>La imagen de CD de las «Guest Additions» de VirtualBox fue descargada con éxito desde <nobr><a href="%1">%2</a></nobr> y guardada localmente como <nobr><b>%3</b>.</nobr></p><p>¿Desea registrar esta imágen de CD y montarla in la unidad de CD/DVD virtual?</p> <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> @@ -6054,7 +6054,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>Uno o más discos virtuales, CD/DVD o medio de disquete no está accesible. Como resultado, no se pueden operar las máquinas virtuales que usen estos medios hasta que estén accesibles.</p><p>Presione <b>Comprobar</b> para abrir la ventana del Administrador de Medios Virtuales y ver que medios está inaccesibles, o presione <b>Ignorar</b> para ignorar este mensaje.</p> + <p>Uno o más discos virtuales, CD/DVD o medio de disquete no está accesible. Como resultado, no se pueden operar las máquinas virtuales que usen estos medios hasta que estén accesibles.</p><p>Presione <b>Comprobar</b> para abrir la ventana del Administrador de medios virtuales y ver que medios están inaccesibles o presione <b>Ignorar</b> para ignorar este mensaje.</p> <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> @@ -6140,7 +6140,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>¿Está seguro que desea restaurar la instantánea <b>%1</b>? Esto causará que pierda el estado actual de la máquina, el cual no puede ser recuperado.</p> + <p>¿Está seguro que desea restaurar la instantánea <b>%1</b>? Esto causa que se pierda el estado actual de la máquina, el cual no podrá ser recuperado.</p> Restore @@ -6164,7 +6164,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>No hay medios sin utilizar para la conexión recién creada.</p><p>Presione el botón <b>Crear</b> para inciar el asistente <i>Nuevo disco virtual</i> y crear un nuevo medio, o presione <b>Seleccionar</b> si desea abrir el <i>Administrador de Medios Virtuales</i>.</p> + <p>No hay medios sin utilizar para la conexión recién creada.</p><p>Presione el botón <b>Crear</b> para inciar el asistente <i>Nuevo disco virtual</i> y crear un nuevo medio o presione <b>Seleccionar</b> si desea abrir el <i>Administrador de medios virtuales</i>.</p> &Create @@ -6178,7 +6178,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <p>There are no unused media available for the newly created attachment.</p><p>Press the <b>Select</b> if you wish to open the <i>Virtual Media Manager</i>.</p> - <p>No hay medios sin utilizar para la conexión recién creada.</p><p> Presione <b>Seleccionar</b> si desea abrir el <i>Administrador de Medios Virtuales</i>.</p> + <p>No hay medios sin utilizar para la conexión recién creada.</p><p> Presione <b>Seleccionar</b> si desea abrir el <i>Administrador de medios virtuales</i>.</p> Failed to attach the %1 to slot <i>%2</i> of the machine <b>%3</b>. @@ -6214,7 +6214,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>No se puede insertar la imagen de CD de las aplicaciones «Guest Additions» en la máquina virtual <b>%1</b>, ya que la máquina no posee unidad de CD/DVD-ROM. Agregue una unidad en la sección de almacenamieto de la configuración de la máquina virtual.</p> + <p>No se puede insertar la imagen de CD de las «Guest Additions» en la máquina virtual <b>%1</b>, ya que la máquina no posee unidad de CD/DVD-ROM. Agregue una unidad en la sección de almacenamieto de la configuración de la máquina virtual.</p> E&xit @@ -6267,7 +6267,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración <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> - <p>¿Está seguro de que quiere eliminar el dispositivo CD/DVD-ROM?</p><p>No podrá montar ningún CD o imagen ISO ni instalar las aplicaciones «Guest Additions»</p> + <p>¿Está seguro de que quiere eliminar el dispositivo CD/DVD-ROM?</p><p>No podrá montar ningún CD o imagen ISO ni instalar las «Guest Additions»</p> &Remove @@ -6734,7 +6734,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración Show &Log... - Mostrar &Historial de Eventos... + Mostrar &historial de eventos... Show Log... @@ -6746,7 +6746,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración Show the log files of the selected virtual machine - Mostrar el Historial de Eventos de la máquina virtual seleccionada + Mostrar el historial de eventos de la máquina virtual seleccionada R&egister VirtualBox... @@ -6790,7 +6790,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración &Virtual Media Manager... - &Administrador de Medios Virtuales... + &Administrador de medios virtuales... Sun VirtualBox @@ -6798,7 +6798,7 @@ este paso y luego conectar los Discos Duros desde el diálogo de Configuración Display the Virtual Media Manager dialog - Mostrar el diálogo Administrador de Medios Virtuales + Mostrar el diálogo Administrador de medios virtuales &Import Appliance... @@ -7903,7 +7903,7 @@ p, li { white-space: pre-wrap; } Guest Additions - Aplicaciones «Guest Additions» + «Guest Additions» Guest OS Type @@ -8027,7 +8027,7 @@ p, li { white-space: pre-wrap; } VBoxVMLogViewer Log Viewer - Visor de Historial de Eventos + Visor de historial de eventos &Save @@ -8055,7 +8055,7 @@ p, li { white-space: pre-wrap; } %1 - VirtualBox Log Viewer - %1 - Visor de Historial de Eventos + %1 - Visor de historial de eventos <p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p> @@ -9608,7 +9608,7 @@ makes the guest see an audio card, however every access to it will be ignored.&l 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. - Define el modo de compartición del portapapeles entre el SO anfitrión y el huésped. Tenga en cuenta que esta opción requiere instalar las aplicaciones «Guest Additions» en el SO huésped. + Define el modo de compartición del portapapeles entre el SO anfitrión y el huésped. Tenga en cuenta que esta opción requiere instalar las «Guest Additions» en el SO huésped. Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. @@ -9628,7 +9628,7 @@ makes the guest see an audio card, however every access to it will be ignored.&l If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs. - Seleccionado, cualquier cambio en el montaje de los medios de CD/DVD y disquete durante la ejecución de la máquina serán salvados en el archivo de configuración. Esto preservará la configuración de los medios entre las ejecuciones de las máquinas virtuales. + Seleccionado, cualquier cambio en el montaje de los medios de CD/DVD y disquete durante la ejecución de la máquina serán guardados en el archivo de configuración. Esto preservará la configuración de los medios entre las ejecuciones de las máquinas virtuales. Removable Media: @@ -9648,7 +9648,7 @@ makes the guest see an audio card, however every access to it will be ignored.&l Show In &Fullscreen/Seamless - Mostrar a pantalla &completa/fluído + Mostrar a pantalla &completa y fluído If checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen. @@ -9895,15 +9895,15 @@ makes the guest see an audio card, however every access to it will be ignored.&l Opens the Virtual Media Manager to select a virtual image for this attachment. - Abre el administrador de medios virtuales para seleccionar la imágen para esta conexión. + Abre el Administrador de medios virtuales para seleccionar la imágen de esta conexión. Open Virtual Media Manager - Abrir administrador de medios virtuales + Abrir Administrador de medios virtuales D&ifferencing Disks - D&iferenciando discos + Discos di&ferenciados 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. @@ -10229,7 +10229,7 @@ makes the guest see an audio card, however every access to it will be ignored.&l 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. - Lista todas las carpetas compartidas accesibles por esta máquina. Use 'net use x: \\vboxsvr\share' para acceder a una carpeta compartida llamada <i>share</i> desde un SO similar a DOS o 'mount -t vboxsf share mount_point' para acceder desde un SO Linux. Esta característica requiere las aplicaciones «Guest Additions». + Lista todas las carpetas compartidas accesibles por esta máquina. Use 'net use x: \\vboxsvr\share' para acceder a una carpeta compartida llamada <i>share</i> desde un SO similar a DOS o 'mount -t vboxsf share mount_point' para acceder desde un SO Linux. Esta característica requiere las «Guest Additions». Name diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts index e004318b9..789a36692 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts @@ -1,6 +1,6 @@ - - + + @@@ @@ -37,14 +37,17 @@ AttachmentsModel + Double-click to add a new attachment ダブルクリックで新規の割り当てを追加 + Hard Disk ハードディスク + Slot スロット @@ -52,18 +55,22 @@ BootItemsList + Move Up (Ctrl-Up) 上に移動(Ctrl-Up) + Move Down (Ctrl-Down) 下に移動(Ctrl-Down) + Moves the selected boot device up. 選択した起動デバイスを上に移動します。 + Moves the selected boot device down. 選択した起動デバイスを下に移動します。 @@ -71,6 +78,7 @@ BootItemsTable + 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. 起動デバイスの優先順序を指定します。チェックボックスを使い各デバイスを有効または無効にできます。項目を上または下に移動してデバイスの順序を変更してください。 @@ -78,14 +86,17 @@ HDItemsModel + Double-click to add a new attachment ダブルクリックで新規の割り当てを追加 + Hard Disk ハードディスク + Slot スロット @@ -118,6 +129,7 @@ VirtualBoxを再インストールしてください。 + 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. このエラーは、カーネル ドライバに十分なメモリを割り当てできないか、またはマッピング操作に失敗したことを意味します。<br/><br/>これはLinux 2.6.29の既知の問題です。このバージョンのカーネルを使用するならば、/usr/src/vboxdrv-*/Makefileを編集し、<i>VBOX_USE_INSERT_PAGE = 1</i>を有効にしてください。その後、root権限で<br/><br/> <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>を実行してカーネル モジュールを再コンパイルしてください。 @@ -188,7 +200,6 @@ ディレクトリを選択 - Select a file ファイルを選択 @@ -197,6 +208,7 @@ QIHelpButton + &Help ヘルプ(&H) @@ -214,55 +226,46 @@ - Left Shift 左 Shift - Right Shift 右 Shift - Left Ctrl 左 Ctrl - Right Ctrl 右 Ctrl - Left Alt 左 Alt - Right Alt 右 Alt - Left WinKey 左 Windowsキー - Right WinKey 右 Windowsキー - Menu key メニューキー @@ -273,22 +276,16 @@ Alt Gr - Caps Lock Caps Lock - Scroll Lock Scroll Lock - - - - <key_%1> <キー %1> @@ -463,6 +460,7 @@ QILabelPrivate + &Copy コピー(&C) @@ -508,6 +506,7 @@ QIRichLabel + Copy to clipboard クリップボードにコピー @@ -545,11 +544,13 @@ VirtualBox について + <qt>VirtualBox Graphical User Interface Version %1<br> %2</qt> <qt>VirtualBox グラフィカルユーザーインターフェース バージョン %1<br>%2</qt> + <qt>VirtualBox Graphical User Interface Version %1<br>%2</qt> <qt>VirtualBox グラフィカルユーザーインターフェース バージョン %1<br>%2</qt> @@ -567,10 +568,12 @@ VBoxAboutNonOSEDlg + VirtualBox - About VirtualBox について + VirtualBox Graphical User Interface Version %1 VirtualBox グラフィカルユーザーインターフェース バージョン %1 @@ -579,22 +582,27 @@ Version %1 VBoxAddNIDialog + Add Host Interface ホスト インターフェースの追加 + Interface Name インターフェース名 + Descriptive name of the new network interface 新規ネットワーク インターフェース名 + &OK OK(&O) + Cancel キャンセル @@ -602,54 +610,67 @@ Version %1 VBoxAddSFDialog + Add Share 共有フォルダの追加 + Edit Share 設定の編集 + Select a folder to share 選択したフォルダを共有 + Folder Path フォルダのパス + Folder Name フォルダ名 + Displays the path to an existing folder on the host PC. ホストPC上の既存のフォルダのパスを表示します。 + Displays the name of the shared folder (as it will be seen by the guest OS). ゲストOSで使用される共有フォルダ名を表示します。 + Opens the dialog to select a folder. フォルダ選択ダイアログを開きます。 + Cancel キャンセル + &OK OK(&O) + &Make Permanent 永続化する(&M) + &Read-only 読み込み専用(&R) + When checked, the guest OS will not be able to write to the specified shared folder. ゲストOSから指定された共有フォルダへの書き込みを禁止します。 @@ -720,7 +741,6 @@ Version %1 バージョン - Description 説明 @@ -796,7 +816,6 @@ Version %1 不明なハードウェア項目 - MB MB @@ -814,7 +833,7 @@ Version %1 Warnings: - 警告: + 警告: @@ -840,30 +859,37 @@ Version %1 仮想マシンの電源オフ(&P) + &Revert to the current snapshot 最新のスナップショットの状態に戻す(&R) + Revert the machine state to the state stored in the current snapshot 仮想マシンの状態を最新のスナップショットに保存されている状態に戻す + Help ヘルプ + F1 F1 + &OK OK(&O) + Cancel キャンセル + <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> @@ -878,6 +904,7 @@ Version %1 シャットダウン シグナル送信(&E) + <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> @@ -886,6 +913,7 @@ Version %1 <p>仮想マシンがこの動作に反応しないならば、ゲストOSの構成に誤りがあるか、電源ボタン オフのACPIイベントに対応していません。この場合、仮想マシンの実行を停止するには<b>[仮想マシンの電源オフ]</b>を選択します。</p> + <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> <p>仮想マシンの電源を切ります。</p> @@ -1002,7 +1030,6 @@ Version %1 仮想マシンをリセットする - ACPI S&hutdown ACPI シャットダウン(&H) @@ -1033,34 +1060,42 @@ Version %1 仮想マシンのスナップショットを作成する + &Floppy Image... フロッピーイメージ(&F)... + Mount a floppy image file フロッピーイメージファイルをマウントする + Unmount F&loppy フロッピーのマウント解除(&L) + Unmount the currently mounted floppy media マウント中のフロッピーメディアをマウント解除する + &CD/DVD-ROM Image... CD/DVD-ROMイメージ(&C)... + Mount a CD/DVD-ROM image file CD/DVD-ROMイメージファイルをマウントする + Unmount C&D/DVD-ROM CD/DVD-ROMのマウント解除(&D) + Unmount the currently mounted CD/DVD-ROM media マウント中のCD/DVDメディアをマウント解除する @@ -1071,6 +1106,7 @@ Version %1 リモートデスクトップ(RDP)サーバー + Remote Dis&play リモートディスプレイ(&P) @@ -1100,34 +1136,42 @@ Version %1 Guest Additions インストールイメージをマウントする + &VirtualBox Web Site... VirtualBox Webサイト(&V)... + Open the browser and go to the VirtualBox product web site WebブラウザでVirtualBox製品のWebサイトを開く + &About VirtualBox... VirtualBox について(&A)... + Show a dialog with product information 製品情報ダイアログを表示する + &Reset All Warnings すべての警告をリセット(&R) + Go back to showing all suppressed warnings and messages すべての抑止された警告とメッセージを再度表示させる + Mount &Floppy フロッピーのマウント(&F) + Mount &CD/DVD-ROM CD/DVD-ROMのマウント(&C) @@ -1152,16 +1196,19 @@ Version %1 ヘルプ(&H) + 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. ゲストOSの画面の自動リサイズ機能が有効なとき(<img src=auto_resize_on_16px.png/>)を、無効なとき(<img src=auto_resize_off_16px.png/>)を表示します。注:本機能の利用にはゲストOSに Guest Additions のインストールが必要です。 + 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. ホスト マウスポインタのキャプチャ状態を表示:<br><nobr><img src=mouse_disabled_16px.png/>&nbsp;&nbsp;キャプチャされていません</nobr><br><nobr><img src=mouse_16px.png/>&nbsp;&nbsp;キャプチャされています</nobr><br><nobr><img src=mouse_seamless_16px.png/>&nbsp;&nbsp;マウス統合は有効です</nobr><br><nobr><img src=mouse_can_seamless_16px.png/>&nbsp;&nbsp;マウス統合は無効、キャプチャされています</nobr><br><nobr><img src=mouse_can_seamless_uncaptured_16px.png/>&nbsp;&nbsp;マウス統合は無効、キャプチャされていません</nobr><br> 注:マウス統合機能の利用にはゲストOSに Guest Additions のインストールが必要です。 + 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. 現在割り当てられているホストキーを表示します。<br>ホストキーを単独で押すと、キーボートとマウスの制御が切り替わります。また、他のキーと合わせてキーボード ショートカットの操作に使用することができます。 @@ -1216,39 +1263,45 @@ Version %1 スナップショット %1 + Host Drive ホスト ドライブ - &Machine 仮想マシン(&M) + &Network Adapters ネットワーク アダプタ(&N) + Adapter %1 network アダプタ %1 + Mount the selected physical drive of the host PC Floppy tip 選択されたホストPCの物理ドライブをマウントする + Mount the selected physical drive of the host PC CD/DVD tip 選択されたホストPCの物理ドライブをマウントする + Disconnect the cable from the selected virtual network adapter 選択された仮想ネットワーク アダプタからケーブルを切断する + Connect the cable to the selected virtual network adapter 選択された仮想ネットワーク アダプタにケーブルを接続する @@ -1263,50 +1316,60 @@ Version %1 シームレスモードに切り替える + Indicates whether the keyboard is captured by the guest OS (<img src=hostkey_captured_16px.png/>) or not (<img src=hostkey_16px.png/>). キーボードがゲストOSにキャプチャされているとき(<img src=hostkey_captured_16px.png/>)を、無効なとき(<img src=hostkey_16px.png/>)を表示します。 + <qt><nobr>Indicates the activity of the floppy media:</nobr>%1</qt> Floppy tooltip <qt><nobr>フロッピーメディアの状態を表示:</nobr>%1</qt> + <br><nobr><b>Host Drive</b>: %1</nobr> Floppy tooltip <br><nobr><b>ホスト ドライブ</b>: %1</nobr> + <br><nobr><b>Image</b>: %1</nobr> Floppy tooltip <br><nobr><b>イメージ</b>: %1</nobr> + <br><nobr><b>No media mounted</b></nobr> Floppy tooltip <br><nobr><b>メディアがマウントされていない</b></nobr> + <qt><nobr>Indicates the activity of the CD/DVD-ROM media:</nobr>%1</qt> DVD-ROM tooltip <qt><nobr>CD/DVD-ROMメディアの状態を表示:</nobr>%1</qt> + <br><nobr><b>Host Drive</b>: %1</nobr> DVD-ROM tooltip <br><nobr><b>ホスト ドライブ</b>: %1</nobr> + <br><nobr><b>Image</b>: %1</nobr> DVD-ROM tooltip <br><nobr><b>イメージ</b>: %1</nobr> + <br><nobr><b>No media mounted</b></nobr> DVD-ROM tooltip <br><nobr><b>メディアがマウントされていない</b></nobr> + <qt><nobr>Indicates activity on the the virtual hard disks:</nobr>%1</qt> HDD tooltip <qt><nobr>仮想ハードディスクの状態を表示:</nobr>%1</qt> @@ -1318,6 +1381,7 @@ Version %1 <br><nobr><b>ハードディスクが割り当てられていない</b></nobr> + <qt><nobr>Indicates the activity of the network interfaces:</nobr>%1</qt> Network adapters tooltip <qt><nobr>ネットワーク インターフェースの状態を表示:</nobr>%1</qt> @@ -1347,6 +1411,7 @@ Version %1 <br><nobr><b>すべてのネットワーク アダプタが無効</b></nobr> + <qt><nobr>Indicates the activity of the attached USB devices:</nobr>%1</qt> USB device tooltip <qt><nobr>USB デバイスの状態を表示:</nobr>%1</qt> @@ -1364,10 +1429,12 @@ Version %1 <br><nobr><b>USB コントローラが無効</b></nobr> + Indicates whether the Remote Display (VRDP Server) is enabled (<img src=vrdp_16px.png/>) or not (<img src=vrdp_disabled_16px.png/>). リモートディスプレイ(VRDPサーバ)機能が有効なとき(<img src=vrdp_16px.png/>) を、無効なとき (<img src=vrdp_disabled_16px.png/>)を表示します。 + <qt><nobr>Indicates the activity of the machineof the machine'sapos;s shared folders: shared folders:</nobr>%1</qt> Shared folders tooltip <qt><nobr>共有フォルダの状態を表示:</nobr>%1</qt> @@ -1376,21 +1443,25 @@ Version %1 <br><nobr><b>No shared folders</b></nobr> Shared folders tooltip - <br><nobr><b>共有フォルダ無し</b></nobr> + <br><nobr><b>共有フォルダなし</b></nobr> + &Contents... ヘルプを表示(&C)... + Show the online help contents オンラインヘルプを表示 + R&egister VirtualBox... VirtualBox を登録(&E)... + Open VirtualBox registration form VirtualBox 登録フォームを開く @@ -1576,289 +1647,358 @@ Version %1 VBoxDiskImageManagerDlg + Name 名前 + Virtual Size 仮想的なサイズ + Actual Size 実際のサイズ + Size サイズ + Virtual Disk Manager 仮想ディスクマネージャ + &Hard Disks ハードディスク(&H) + &CD/DVD Images CD/DVDイメージ(&C) + &Floppy Images フロッピーイメージ(&F) + Help ヘルプ + F1 F1 + Invoke dialog's help ダイアログのヘルプを表示 + &OK OK(&O) + Accept dialog ダイアログに同意 + Cancel キャンセル + Cancel dialog ダイアログをキャンセル + -- no info -- + &New... 新規(&N)... + &Add... 追加(&A)... + R&emove 除去(&E) + Re&lease 解放(&L) + Re&fresh 最新の情報に更新(&F) + New 新規 + Add 追加 + Remove 除去 + Release 解放 + Refresh 最新の情報に更新 + Ctrl+N Ctrl+N + Ctrl+A Ctrl+A + Ctrl+D Ctrl+D + Ctrl+L Ctrl+L + Ctrl+R Ctrl+R + &Actions 動作 + Location 場所 + Disk Type ディスク タイプ + Storage Type ストレージ タイプ + Attached to 割り当て + Snapshot スナップショット + Checking accessibility アクセス可否を確認 + <nobr><b>%1</b></nobr><br>Checking accessibility... HDD <nobr><b>%1</b></nobr><br>アクセス可否を確認中... + <nobr><b>%1</b></nobr><br><nobr>Disk type:&nbsp;&nbsp;%2</nobr><br><nobr>Storage type:&nbsp;&nbsp;%3</nobr> <nobr><b>%1</b></nobr><br><nobr>ディスク タイプ:&nbsp;&nbsp;%2</nobr><br><nobr>ストレージ タイプ:&nbsp;&nbsp;%3</nobr> + <br><nobr>Attached to:&nbsp;&nbsp;%1</nobr> HDD <br><nobr>割り当て:&nbsp;&nbsp;%1</nobr> + <br><nobr>Snapshot:&nbsp;&nbsp;%5</nobr> HDD <br><nobr>スナップショット:&nbsp;&nbsp;%5</nobr> + <nobr><b>%1</b></nobr><br>Error checking media accessibility HDD <nobr><b>%1</b></nobr><br>メディアのアクセス可否確認でエラー + <nobr><b>%1</b></nobr><br>%2 HDD <nobr><b>%1</b></nobr><br>%2 + <nobr><b>%1</b></nobr><br>Checking accessibility... CD/DVD/Floppy <nobr><b>%1</b></nobr><br>アクセス可否を確認中... + <nobr><b>%1</b></nobr> CD/DVD/Floppy <nobr><b>%1</b></nobr> + <br><nobr>Attached to:&nbsp;&nbsp;%1</nobr> CD/DVD/Floppy <br><nobr>割り当て:&nbsp;&nbsp;%1</nobr> + <nobr><b>%1</b></nobr><br>Error checking media accessibility CD/DVD/Floppy <nobr><b>%1</b></nobr><br>メディアのアクセス可否確認でエラー + <nobr><b>%1</b></nobr><br>%2 <nobr><b>%1</b></nobr><br>%2 + The image file is not accessible CD/DVD/Floppy イメージファイルにアクセスできない + &Select 選択(&S) + All hard disk images (*.vdi; *.vmdk);;Virtual Disk images (*.vdi);;VMDK images (*.vmdk);;All files (*) すべてのハードディスクイメージファイル(*.vdi; *.vmdk);;仮想ディスクイメージ(*.vdi);;VMDKイメージ(*.vmdk);;すべてのファイル (*) + Select a hard disk image file ハードディスクイメージファイルを選択 + Select a CD/DVD-ROM disk image file CD/DVD-ROMディスクイメージファイルを選択 + Select a floppy disk image file フロッピーディスクイメージファイルを選択 + Create a new virtual hard disk 新規仮想ハードディスクの作成 + Add (register) an existing image file 既存のメディア ファイルを追加(登録)する + Remove (unregister) the selected media 選択したメディアを取り除く(登録解除) + Release the selected media by detaching it from the machine 選択したメディアを仮想マシンから割り当て解除して解放する + Refresh the media list メディアリストを最新の情報に更新 + CD/DVD-ROM images (*.iso);;All files (*) CD/DVD-ROMイメージ(*.iso);;すべてのファイル(*) + Floppy images (*.img);;All files (*) フロッピーイメージ(*.img);;すべてのファイル(*) + All hard disk images (*.vdi *.vmdk *.vhd);;Virtual Disk images (*.vdi);;VMDK images (*.vmdk);;VHD images (*.vhd);;All files (*) すべてのハードディスクイメージファイル(*.vdi *.vmdk *.vhd);;仮想ディスクイメージ(*.vdi);;VMDKイメージ(*.vmdk);;VHDイメージ(*.vhd);;すべてのファイル (*) + Hard &Disks ハードディスク(&D) + <nobr>Location:</nobr> <nobr>場所:</nobr> + <nobr>Disk Type:</nobr> <nobr>ディスク タイプ:</nobr> + <nobr>&nbsp;&nbsp;Storage Type:</nobr> <nobr>&nbsp;&nbsp;ストレージ タイプ:</nobr> + <nobr>Attached to:</nobr> <nobr>割り当て先:</nobr> + <nobr>&nbsp;&nbsp;Snapshot:</nobr> <nobr>&nbsp;&nbsp;スナップショット:</nobr> @@ -1866,30 +2006,37 @@ Version %1 VBoxDownloaderWgt + Cancel キャンセル + Downloading the VirtualBox Guest Additions CD image from <nobr><b>%1</b>...</nobr> VirtualBox Guest Additions CDイメージを<nobr><b>%1</b>からダウンロード...</nobr> + Cancel the VirtualBox Guest Additions CD image download VirtualBox Guest Additions CDイメージのダウンロードをキャンセル + Could not locate the file on the server (response: %1). サーバー上にファイルが見つかりませんでした(応答: %1)。 + <p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p> <p>ダウンロードしたファイル(<nobr><b>%1</b></nobr>)の保存に失敗しました。</p> + Select folder to save Guest Additions image to Guest Additionsイメージを保存するフォルダを選択 + Connection timed out. 接続がタイムアウトになりました。 @@ -1951,31 +2098,21 @@ p, li { white-space: pre-wrap; } <!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;">このウィザードは、仮想アプライアンスをエクスポートする手順を案内します。</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>ボタンを使用してください。</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">エクスポートする仮想マシンを選択してください。 1つ以上の仮想マシンを選択できます。 エクスポートする前に、それらの仮想マシンをオフにしなければなりません。</p></body></html> - - - < &Back < 戻る(&B) - - &Next > 次へ(&N) > - - - Cancel キャンセル - - Appliance Export Settings 仮想アプライアンスのエクスポート設定 @@ -1991,6 +2128,7 @@ p, li { white-space: pre-wrap; } デフォルト値に戻す + Please specify a filename into which the appliance information will be written. Currently VirtualBox supports the Open Virtualization Format (OVF). 仮想アプライアンス情報が書かれたファイル名を指定してください。 VirtualBoxはOpen Virtualization Format(OVF)をサポートします。 @@ -2189,6 +2327,7 @@ p, li { white-space: pre-wrap; } VBoxGLSettingsGeneral + 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. デフォルトのVDIフォルダのパスを表示します。新規仮想ハードディスクの作成時に保存先を明示的に指定しない場合、このフォルダが使用されます。 @@ -2245,7 +2384,7 @@ p, li { white-space: pre-wrap; } &Auto show Dock && Menubar in fullscreen - + フルスクリーンモード時にドックとメニューバーを自動的に表示(&A) @@ -2274,7 +2413,6 @@ p, li { white-space: pre-wrap; } VBoxGLSettingsLanguage - (built-in) Language @@ -2405,8 +2543,6 @@ p, li { white-space: pre-wrap; } IPv4 アドレス - - Not set address @@ -2418,7 +2554,6 @@ p, li { white-space: pre-wrap; } IPv4 ネットワーク マスク - Not set mask @@ -2473,7 +2608,6 @@ p, li { white-space: pre-wrap; } 下限 - Not set bound @@ -2500,7 +2634,6 @@ p, li { white-space: pre-wrap; } ホストオンリー ネットワークを編集(&E) - Performing creating/removing host-only network @@ -2706,6 +2839,7 @@ p, li { white-space: pre-wrap; } VBoxGlobal + Differencing hard disk 差分 @@ -2753,6 +2887,7 @@ p, li { white-space: pre-wrap; } メインメモリ + <nobr>%3 MB</nobr> details report <nobr>%3 MB</nobr> @@ -2770,6 +2905,7 @@ p, li { white-space: pre-wrap; } ビデオメモリ + <nobr>%4 MB</nobr> details report <nobr>%4 MB</nobr> @@ -2793,11 +2929,13 @@ p, li { white-space: pre-wrap; } IO APIC + Not Attached details report (HDDs) 割り当てられていません + Hard Disks details report ハードディスク @@ -2827,41 +2965,49 @@ p, li { white-space: pre-wrap; } 無効 + Not mounted details report (floppy) マウントされていません + Image details report (floppy) イメージ + Host Drive details report (floppy) ホスト ドライブ + Floppy details report フロッピー + Not mounted details report (DVD) マウントされていません + Image details report (DVD) イメージ + Host Drive details report (DVD) ホスト ドライブ + CD/DVD-ROM details report CD/DVD-ROM @@ -2879,7 +3025,6 @@ p, li { white-space: pre-wrap; } オーディオ - Adapter %1 details report (network) @@ -2916,26 +3061,31 @@ p, li { white-space: pre-wrap; } 無効 + VRDP Server Port details report (VRDP) VRDPサーバー ポート + %1 details report (VRDP) %1 + Disabled details report (VRDP) 無効 + Remote Display details report リモートディスプレイ + Opening URLs is not implemented yet. "URLを開く"はまだ実装されていません。 @@ -2994,6 +3144,7 @@ p, li { white-space: pre-wrap; } 復元中 + Discarding MachineState 破棄中 @@ -3071,16 +3222,19 @@ p, li { white-space: pre-wrap; } ライトスルー + Virtual Disk Image DiskStorageType 仮想ディスクイメージ + iSCSI DiskStorageType iSCSI + VMDK Image DiskStorageType VMDKイメージ @@ -3164,6 +3318,7 @@ p, li { white-space: pre-wrap; } NAT + Host Interface NetworkAttachmentType ホスト インターフェース @@ -3211,11 +3366,13 @@ p, li { white-space: pre-wrap; } キャプチャ + <i>Checking...</i> hard disk <i>確認中...</i> + <i>Inaccessible</i> hard disk <i>アクセス不可</i> @@ -3245,10 +3402,12 @@ p, li { white-space: pre-wrap; } 双方向 + Select a directory ディレクトリを選択 + Select a file ファイルを選択 @@ -3283,6 +3442,7 @@ p, li { white-space: pre-wrap; } 共有フォルダ + %1 details report (shadef folders) %1 @@ -3300,6 +3460,7 @@ p, li { white-space: pre-wrap; } 共有フォルダ + Stuck MachineState スタック @@ -3329,13 +3490,12 @@ p, li { white-space: pre-wrap; } ユーザー定義 + Custom Hard Disk DiskStorageType カスタム ハードディスク - - VT-x/AMD-V details report @@ -3348,16 +3508,12 @@ p, li { white-space: pre-wrap; } PAE/NX - - Enabled details report (VT-x/AMD-V) 有効 - - Disabled details report (VT-x/AMD-V) @@ -3460,6 +3616,7 @@ p, li { white-space: pre-wrap; } ポート %1 + VHD Image DiskStorageType VHDイメージ @@ -3507,11 +3664,13 @@ p, li { white-space: pre-wrap; } Intel PRO/1000 MT Desktop (82540EM) + PIIX3 IDEControllerType PIIX3 + PIIX4 IDEControllerType PIIX4 @@ -3571,11 +3730,13 @@ p, li { white-space: pre-wrap; } <nobr>状態: %1</nobr> + host interface, %1 details report (network) ホスト インターフェース, %1 + internal network, '%1' details report (network) 内部ネットワーク, '%1' @@ -3587,31 +3748,37 @@ p, li { white-space: pre-wrap; } アダプタ %1 + <br><nobr>Type&nbsp;(Format):&nbsp;&nbsp;%2&nbsp;(%3)</nobr> hard disk <br><nobr>タイプ&nbsp;(形式):&nbsp;&nbsp;%2&nbsp;(%3)</nobr> + <br><nobr>Attached to:&nbsp;&nbsp;%1</nobr> medium <br><nobr>割り当て:&nbsp;&nbsp;%1</nobr> + <i>Not&nbsp;Attached</i> medium <i>未割り当て</i> + <br><i>Checking accessibility...</i> medium <br><i>アクセス可否を確認中...</i> + <hr>Failed to check media accessibility.<br>%1. medium <hr>メディアのアクセス可否の確認に失敗しました。<br>%1. + <hr><img src=%1/>&nbsp;Attaching this hard disk will be performed indirectly using a newly created differencing hard disk. medium <hr><img src=%1/>&nbsp;このハードディスクの割り当ては、新規作成された差分ハードディスクの使用により、間接的に実行されます。 @@ -3629,10 +3796,12 @@ p, li { white-space: pre-wrap; } アクセスできません + <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. <hr>ハードディスク チェーン中のいくつかのメディアにアクセスできません。仮想メディアマネージャの<b>[別のハードディスクを表示する]</b>を使用して、これらのメディアを確認してください。 + %1<hr>This base hard disk is indirectly attached using the following differencing hard disk:<br>%2%3 %1<hr>このベース ハードディスクは以下の差分ハードディスクを使用して間接的に割り当てられます:<br>%2%3 @@ -3667,27 +3836,25 @@ p, li { white-space: pre-wrap; } 差分 - Nested Paging details report ネステッドページング - Enabled details report (Nested Paging) 有効 - Disabled details report (Nested Paging) 無効 + Bridged network, %1 details report (network) ブリッジ ネットワーク, '%1' @@ -3699,6 +3866,7 @@ p, li { white-space: pre-wrap; } 内部ネットワーク, '%1' + Host-only network, '%1' details report (network) ホストオンリー ネットワーク, '%1' @@ -3710,11 +3878,13 @@ p, li { white-space: pre-wrap; } SCSI + Bridged Network NetworkAttachmentType ブリッジ ネットワーク + Host-only Network NetworkAttachmentType ホストオンリー ネットワーク @@ -3786,14 +3956,12 @@ p, li { white-space: pre-wrap; } ホストオンリー アダプタ - <nobr>%1 MB</nobr> details report <nobr>%1 MB</nobr> - Processor(s) details report @@ -3812,7 +3980,6 @@ p, li { white-space: pre-wrap; } システム - Remote Display Server Port details report (VRDP Server) @@ -3863,7 +4030,7 @@ p, li { white-space: pre-wrap; } (CD/DVD) - + (CD/DVD) @@ -3890,7 +4057,6 @@ p, li { white-space: pre-wrap; } 瞑想中(システムエラー) - Teleporting MachineState @@ -4077,43 +4243,43 @@ p, li { white-space: pre-wrap; } %n year(s) - - + + %n 年 %n month(s) - - + + %n 月 %n day(s) - - + + %n 日 %n hour(s) - - + + %n 時間 %n minute(s) - - + + %n 分 %n second(s) - - + + %n 秒 @@ -4138,186 +4304,231 @@ p, li { white-space: pre-wrap; } VBoxGlobalSettingsDlg + Category カテゴリ + [id] [id] + [link] [link] + [name] [name] + <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>. <i>左側のリストから設定のカテゴリを選択し、設定項目をマウスオーバーして詳細な情報を参照してください<i>。 + General 一般 + 0 0 + Input 入力 + 1 1 + USB USB + 2 2 + Default &Folders デフォルト フォルダ(&F) + Machines 仮想マシン + VDI files VDIファイル + Select 選択 + &Keyboard キーボード(&K) + &Host Key ホストキー(&H) + &Auto capture keyboard キーボードの自動キャプチャ(&A) + &USB Device Filters USB デバイス フィルタ(&U) + Ins Ins + Alt+Ins Alt+Ins + Del Del + Ctrl+Up Ctrl+Up + Ctrl+Down Ctrl+Down + Help ヘルプ + F1 F1 + Displays the dialog help. ダイアログのヘルプを表示します。 + Invalid settings detected 無効な設定が見つかりました + &OK OK(&O) + Accepts (saves) changes and closes the dialog. 変更を保存してダイアログを閉じます。 + Cancel キャンセル + Cancels changes and closes the dialog. 変更を破棄してダイアログを閉じます。 + VirtualBox Preferences VirtualBox 環境設定 + 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. 仮想マシンのウィンドウでホストキーとして使用するキーを表示します。変更するには入力フィールドをアクティブにして新しいホストキーを押してください。注:英数字、カーソルキー、編集キーはホストキーとして使用できません。 + New Filter %1 usb 新規フィルタ %1 + Language 言語 + Language 言語 + 3 3 + &Interface Language インターフェース言語(&I) + Author(s): 作者: + Language: 言語: + (built-in) Language (内蔵) + <unavailable> Language <利用不可> + <unknown> Author(s) <不明> + <qt>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset @@ -4327,67 +4538,83 @@ to the system default language.</qt> システムのデフォルト言語に戻すには<i>デフォルト</i>を選択してください。</qt> + Default Language デフォルト + 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. デフォルトのVDIフォルダのパスを表示します。新規仮想ハードディスクの作成時に保存先を明示的に指定しない場合、このフォルダが使用されます。 + 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. 仮想マシン フォルダのパスをデフォルト値に戻します。変更後、再度このダイアログを開くとデフォルトのパスが表示されます。 + 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. VDIフォルダのパスをデフォルト値に戻します。変更後、再度このダイアログを開くとデフォルト パスが表示されます。 + Displays the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines. デフォルトの仮想マシン フォルダのパスを表示します。新規仮想マシンの作成時に保存先を明示的に指定しない場合、このフォルダが使用されます。 + Opens a dialog to select the default VDI folder. ダイアログを開いてデフォルトのVDIフォルダを選択します。 + Opens a dialog to select the default virtual machine folder. ダイアログを開いてデフォルトの仮想マシン フォルダを選択します。 + 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. 仮想マシンのウィンドウがアクティブのとき、キーボードを自動的にキャプチャします。キーボードがキャプチャされると、すべてのキーストローク(Alt-Tabなどを含む)が仮想マシンに送られます。 + V&RDP Authentication Library VRDP認証ライブラリ(&R) + Displays the path to the library that provides authentication for Remote Display (VRDP) clients. リモートディスプレイ(VRDP)クライアントに認証を提供するライブラリのパスを表示します。 + Opens a dialog to select the VRDP authentication library file. VRDP認証ライブラリ ファイルの選択ダイアログを開きます。 + 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. 認証ライブラリ ファイルの値をデフォルト値にリセットします。変更を適用し、再度このダイアログを開くと現在の認証ライブラリ ファイルが表示されます。 + &Extended Features 拡張機能(&E) + Enable &VT-x/AMD-V VT-x/AMD-Vを有効化(&V) + 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. 仮想マシンがホストCPUのIntel VT-xやAMD-Vなどの仮想化支援機能をデフォルトで使用するかどうかを指定します。 + <qt>Lists all global USB filters. The checkbox to the left @@ -4402,14 +4629,17 @@ to the system default language.</qt> USBフィルタを追加または除去するにはコンテキストメニューか右側のボタンを使用してください。</qt> + Add Empty Filter 空のフィルタを追加 + &Add Empty Filter 空のフィルタを追加(&A) + <qt>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB @@ -4418,14 +4648,17 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>すべてのフィールドが空の新規USBフィルタを追加します。注:このフィルタはすべての接続されたUSB デバイスに適合します。</qt> + Add Filter From Device デバイスからフィルタを追加 + A&dd Filter From Device デバイスからフィルタを追加する(&D) + <qt>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</qt> @@ -4433,42 +4666,51 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>選択したホストPCのUSB デバイスの値をすべてのフィールドに設定した新規USBフィルタを追加します。</qt> + Remove Filter フィルタを除去 + &Remove Filter フィルタを除去する(&R) + <qt>Removes the highlighted USB filter.</qt> <qt>ハイライト表示されたフィルタを除去します。</qt> + Move Filter Up フィルタを上に移動 + &Move Filter Up フィルタを上に移動する(&M) + <qt>Moves the highlighted USB filter up.</qt> <qt>ハイライト表示されたフィルタを上に移動します。</qt> + Move Filter Down フィルタを下に移動 + M&ove Filter Down フィルタを下に移動(&O) + <qt>Moves the highlighted USB filter down.</qt> @@ -4478,26 +4720,32 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxHardDiskSettings + Slot スロット + Hard Disk ハードディスク + VBoxHardDiskSettings VBoxHardDiskSettings + &Hard Disks ハードディスク(&H) + &Enable SATA Controller SATA コントローラを有効化(&E) + <qt>When checked, enables the virtual SATA controller of this machine. Note that you cannot @@ -4507,10 +4755,12 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>この仮想マシンの仮想SATA コントローラを有効にします。注:仮想コントローラが無効なとき、ハードディスクをSATAポートに取り付けることができません。</qt> + Hard Disks &Attachments ハードディスクの割り当て(&A) + <qt>Lists all hard disks attached to this machine. Use a mouse double-click or the @@ -4527,54 +4777,66 @@ USBフィルタを追加または除去するにはコンテキストメニュ + Add Attachment 割り当ての追加 + &Add Attachment 割り当てを追加する(&A) + Ins Ins + <qt>Adds a new hard disk attachment.</qt> <qt>新規ハードディスクの割り当てを追加します。</qt> + Remove Attachment 割り当てを除去 + &Remove Attachment 割り当てを除去する(&R) + Delete 削除 + <qt>Removes the highlighted hard disk attachment.</qt> <qt>ハイライト表示されたハードディスクの割り当てを除去します。</qt> + Select Hard Disk ハードディスクを選択 + &Select Hard Disk ハードディスクを選択する(&S) + Ctrl+Space Ctrl+スペース + <qt>Invokes the Virtual Disk Manager to select a hard disk to attach to the currently highlighted slot.</qt> @@ -4582,14 +4844,17 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>仮想ディスクマネージャを起動し、ハードディスクを現在ハイライト表示されたスロットに割り当てます。</qt> + <i>%1</i> uses the hard disk that is already attached to <i>%2</i> <i>%1</i>はすでに<i>%2</i>に割り当てられている + Double-click to add a new attachment ダブルクリックで新規の割り当てを追加 + No hard disk is selected for <i>%1</i> <i>%1</i>のためのハードディスクが選択されていない @@ -4649,7 +4914,6 @@ p, li { white-space: pre-wrap; } <!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;">このウィザードは、仮想アプライアンスをインポートする手順を案内します。 </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>ボタンを使用してください。</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">インポートするには、最初に仮想アプライアンス情報が書かれたファイルを選択しなければなりません。 VirtualBoxはOpen Virtualization Format(OVF)をサポートします。続いて、以下からインポートするファイルを選択してください:</p></body></html> - < &Back < 戻る(&B) @@ -4660,7 +4924,6 @@ p, li { white-space: pre-wrap; } 次へ(&N) > - Cancel キャンセル @@ -4811,18 +5074,22 @@ p, li { white-space: pre-wrap; } VBoxMediaComboBox + <no hard disk> <ハードディスクなし> + No hard disk ハードディスクなし + No media available. Use the Virtual Media Manager to add media of the corresponding type. 利用可能なメディアがありません。 仮想メディアマネージャを使用して、対応するタイプのメディアを追加してください。 + <no media> <メディアなし> @@ -4885,24 +5152,16 @@ p, li { white-space: pre-wrap; } メディアリストを最新の情報に更新 - - - - - Location 場所 - Type (Format) タイプ(形式) - - Attached to 割り当て @@ -4974,8 +5233,6 @@ p, li { white-space: pre-wrap; } ハードディスク(&D) - - Name 名前 @@ -4996,7 +5253,6 @@ p, li { white-space: pre-wrap; } CD/DVDイメージ(&C) - Size サイズ @@ -5046,34 +5302,42 @@ p, li { white-space: pre-wrap; } VBoxNIList + VirtualBox Host Interface %1 VirtualBox ホスト インターフェース %1 + <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> - <p>選択したホスト インターフェース ;<nobr><b>"%1"</b>を除去しますか?</nobr></p><p><b>注:</b> このインターフェースは複数の仮想マシンの1つ以上のネットワーク アタプタで使用中かもしれません。除去すると、他のインターフェース名を選ぶか、別の割り当て方法を正しく設定するまでそれらのアダプタは動作しません。</p> + <p>選択したホスト インターフェース ;<nobr><b>"%1"</b>を除去しますか?</nobr></p><p><b>注:</b> このインターフェースは複数の仮想マシンの1つ以上のネットワーク アタプタで使用中かもしれません。除去すると、他のインターフェース名を選ぶか、別の割り当て方法を正しく設定するまでそれらのアダプタは動作しません。</p> + Host &Interfaces ホスト インターフェース(&I) + Lists all available host interfaces. 利用可能なホスト インターフェースをリスト表示します。 + A&dd New Host Interface 新規ホスト インターフェースの追加(&D) + &Remove Selected Host Interface 選択したホスト インターフェースの除去(&R) + Adds a new host interface. 新規ホスト インターフェースを追加します。 + Removes the selected host interface. 選択したホスト インターフェースを除去します。 @@ -5094,6 +5358,7 @@ p, li { white-space: pre-wrap; } 新規仮想ディスクの作成 + <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> @@ -5106,41 +5371,50 @@ and the <b>Back</b> button to return to the previous page.</p> ようこそ新規仮想ディスク作成ウィザードへ! + Image Type イメージのタイプ + &Dynamically expanding image 可変サイズのイメージ(&D) + &Fixed-size image 固定サイズのイメージ(&F) + Virtual Disk Image Type 仮想ディスクイメージのタイプ + <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> <p><b>[選択]</b>ボタンをクリックし、ファイルの場所と名前を選択して仮想ハードディスクイメージを保存するか、入力フィールドにファイル名を入力してください 。</p> + &Image File Name イメージファイル名(&I) + Select 選択 + <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> <p>仮想ハードディスクのサイズを選択してください。 このサイズは仮想ハードディスクのサイズとしてゲストOSに報告されます。</p> + Image &Size イメージのサイズ(&S) @@ -5150,10 +5424,12 @@ as the size of the virtual hard disk.</p> 仮想ディスクの場所とサイズ + You are going to create a new virtual hard disk image with the following parameters: 新規仮想ハードディスクイメージは以下の設定で作成されます: + If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk image will be created. @@ -5170,6 +5446,7 @@ as the size of the virtual hard disk.</p> <nobr>%1 バイト</nobr> + <table><tr><td>Type:</td><td>%1</td></tr><tr><td>Location:</td><td>%2</td></tr><tr><td>Size:</td><td>%3&nbsp;(%4&nbsp;Bytes)</td></tr></table> <table><tr><td>タイプ:</td><td>%1</td></tr><tr><td>場所:</td><td>%2</td></tr><tr><td>サイズ:</td><td>%3&nbsp;(%4&nbsp;バイト)</td></tr></table> @@ -5184,6 +5461,7 @@ as the size of the virtual hard disk.</p> 新規ハードディスクのファイルを選択してください + <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 @@ -5198,37 +5476,37 @@ time depending on the image size and the write performance of your harddisk.< 固定サイズのイメージの作成は、イメージのサイズとハードディスクの書き込み性能に依存して長い時間がかかるかもしれません。</p> + <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> <p>このウィザードは仮想マシン用の新規仮想ハードディスクイメージ作成を手助けします。</p><p>ウィザードの次のページに進むには<b>[次へ]</b>ボタンを、前のページに戻るには<b>[戻る]</b>ボタンを使用してください。</p> - - - < &Back < 戻る(&B) - - &Next > 次へ(&N) > + <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> <p>作成する仮想ハードディスクイメージのタイプを選択してください。</p><p><b>可変サイズのイメージ</b>は、最初に物理的なハードディスク上のごく小さな容量しか使用しません。ゲストOSが要求するディスク容量に応じてサイズが動的に増加(指定されたサイズまで)します。</p><p><b>固定サイズのイメージ</b>の容量は増加しません。仮想ハードディスクのサイズとほぼ同じサイズのファイルに保存されます。固定サイズのイメージの作成は、イメージのサイズとハードディスクの書き込み性能に依存して長い時間がかかるかもしれません。</p> + <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> <p><b>[選択]</b>ボタンをクリックし、ファイルの場所と名前を選択して仮想ハードディスクイメージを保存するか、入力フィールドにファイル名を入力してください 。</p> + <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> <p>仮想ハードディスクのサイズを選択してください。このサイズは仮想ハードディスクのサイズとしてゲストOSに報告されます。</p> + If the above settings are correct, press the <b>Finish</b> button. Once you press it, a new hard disk image will be created. 上記の設定が正しければ、<b>[完了]</b>ボタンをクリックしてください。 新規ハードディスクイメージが作成されます。 @@ -5262,9 +5540,6 @@ time depending on the image size and the write performance of your harddisk.< バイト - - - Cancel キャンセル @@ -5338,6 +5613,7 @@ time depending on the image size and the write performance of your harddisk.< 新規仮想マシンの作成 + <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 @@ -5351,6 +5627,7 @@ and the <b>Back</b> button to return to the previous page.</p> ようこそ新規仮想マシン作成ウィザードへ! + <p>Enter a name for the new virtual machine and select the type of the guest operating system you plan to install onto the virtual machine.</p> <p>The name of the virtual machine usually indicates its software and hardware configuration. @@ -5384,14 +5661,17 @@ It will be used by all VirtualBox components to identify your virtual machine.&l メインメモリのサイズ(&M) + < < + = = + > > @@ -5406,6 +5686,7 @@ It will be used by all VirtualBox components to identify your virtual machine.&l メモリ + <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 @@ -5419,14 +5700,17 @@ step and attach hard disks later using the VM Settings dialog.</p> + B&oot Hard Disk (Primary Master) 起動ディスク (プライマリ マスター) (&O) + N&ew... 新規(&E)... + E&xisting... 選択(&X)... @@ -5436,6 +5720,7 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想ハードディスク + <p> You are going to create a new virtual machine @@ -5445,6 +5730,7 @@ step and attach hard disks later using the VM Settings dialog.</p> <p>新規仮想マシンは以下の設定で作成されます: </p> + <p> If the above is correct press the <b>Finish</b> button. @@ -5465,14 +5751,17 @@ step and attach hard disks later using the VM Settings dialog.</p>概要 + <qt>%1&nbsp;MB</qt> <qt>%1&nbsp;MB</qt> + <tr><td>Name:</td><td>%1</td></tr><tr><td>OS Type:</td><td>%2</td></tr><tr><td>Base Memory:</td><td>%3&nbsp;MB</td></tr> <tr><td>名前:</td><td>%1</td></tr><tr><td>OSタイプ:</td><td>%2</td></tr><tr><td>メインメモリ:</td><td>%3&nbsp;MB</td></tr> + <tr><td>Boot Hard Disk:</td><td>%4</td></tr> <tr><td>起動ディスク:</td><td>%4</td></tr> @@ -5492,18 +5781,11 @@ step and attach hard disks later using the VM Settings dialog.</p><p>このウィザードはVirtualBox用の新規仮想マシンを作成するために必要なステップを案内します。</p><p>ウィザードの次のページに進むには<b>[次へ]</b>ボタンを、前のページに戻るには<b>[戻る]</b>ボタンを使用してください。</p> - - - - < &Back < 戻る(&B) - - - &Next > 次へ(&N) > @@ -5514,6 +5796,7 @@ step and attach hard disks later using the VM Settings dialog.</p><p>新規仮想マシンの名前を入力し、仮想マシンにインストールしたいゲストOSのタイプを選択してください。</p><p>通常、仮想マシンの名前はソフトウェアとハードウェア構成を示します。VirtualBoxは作成された仮想マシンを特定するためにこの名前を使用します。</p> + <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> <p>仮想マシンで起動ディスクとして使用するハードディスクイメージを選択します。<b>[新規]</b>ボタンをクリックして新規ハードディスクを作成するか、ドロップダウンリストまたは<b>[選択]</b>ボタンをクリック(仮想ディスクマネージャを起動します)して既存のハードディスクイメージを選択します。</p><p>より高度なハードディスク設定が必要であれば、このステップをスキップし、後で仮想マシン設定ダイアログを使用してハードディスクを割り当てることもできます。</p> @@ -5533,8 +5816,6 @@ step and attach hard disks later using the VM Settings dialog.</p>完了(&F) - - MB megabytes @@ -5565,10 +5846,6 @@ step and attach hard disks later using the VM Settings dialog.</p>起動 ハードディスク - - - - Cancel キャンセル @@ -5607,6 +5884,7 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシンにインストールするOSの種類を表示します。 + V&ersion: バージョン(&E): @@ -5700,7 +5978,6 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシン<b>"%1"</b>の設定の適用に失敗しました。 - Failed to start the virtual machine <b>%1</b>. 仮想マシン<b>"%1"</b>の起動に失敗しました。 @@ -5716,19 +5993,16 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシン<b>"%1"</b>の再開に失敗しました。 - Failed to save the state of the virtual machine <b>%1</b>. 仮想マシン<b>"%1"</b>の状態の保存に失敗しました。 - Failed to create a snapshot of the virtual machine <b>%1</b>. 仮想マシン<b>"%1"</b>のスナップショット作成に失敗しました。 - Failed to stop the virtual machine <b>%1</b>. 仮想マシン<b>"%1"</b>の停止に失敗しました。 @@ -5744,14 +6018,17 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシン<b>"%1"</b>の保存された状態の破棄に失敗しました。 + Failed to discard the snapshot <b>%1</b> of the virtual machine <b>%2</b>. 仮想マシン<b>"%2"</b>のスナップショット <b>%1</b> の破棄に失敗しました。 + Failed to discard the current state of the virtual machine <b>%1</b>. 仮想マシン<b>"%1"</b>の最新の状態の破棄に失敗しました。 + Failed to discard the current snapshot and the current state of the virtual machine <b>%1</b>. 仮想マシン<b>"%1"</b>の最新のスナップショットと状態の破棄に失敗しました。 @@ -5777,43 +6054,53 @@ step and attach hard disks later using the VM Settings dialog.</p><p>仮想マシン<b>"%1"</b>の保存された状態を破棄しますか?</p><p>この操作はゲストOSを適切にシャットダウンせずにリセットまたは電源をオフにすることと同等です。</p> + <p>Releasing this media image will detach it from the following virtual machine(s): <b>%1</b>.</p><p>Continue?</p> - <p>このメディアイメージを解放すると、以下の仮想マシンでの割り当てが解除されます:<b>%1</b>.</p><p>続行しますか?</p> + <p>このメディアイメージを解放すると、以下の仮想マシンでの割り当てが解除されます:<b>%1</b>.</p><p>続行しますか?</p> + <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> <p>イメージファイル<b>"%1"</b>はすでに存在します。他の仮想ハードディスクでこの名前が使用されているため、新規仮想ハードディスクを作成できません。</p><p>別のイメージファイル名を指定してください。</p> + Failed to delete the virtual hard disk image <b>%1</b>. 仮想ハードディスクイメージ<b>"%1"</b>の削除に失敗しました。 + <p>Do you want to remove (unregister) the virtual hard disk <nobr><b>%1</b>?</nobr></p> - <p>仮想ハードディスク<nobr><b>"%1"</b>を除去(登録解除)しますか?</nobr></p> + <p>仮想ハードディスク<nobr><b>"%1"</b>を除去(登録解除)しますか?</nobr></p> + Failed to create the virtual hard disk image <nobr><b>%1</b>.</nobr> 仮想ハードディスクイメージ<nobr><b>"%1"</b>の作成に失敗しました。</nobr> + hard disk ハードディスク + CD/DVD image CD/DVDイメージ + floppy image フロッピーイメージ + Failed to register the %1 <nobr><b>%2</b></nobr>. %1 <nobr><b>%2</b></nobr>の登録に失敗しました。 + Failed to unregister the %1 <nobr><b>%2</b></nobr>. %1 <nobr><b>%2</b></nobr>の登録解除に失敗しました。 @@ -5828,33 +6115,31 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシン<b>"%1"</b>のセッションを開けませんでした。 + Failed to determine the accessibility state of the media <nobr><b>%1</b></nobr>. Some of the registered media may become inaccessible. メディア<nobr><b>"%1"</b></nobr>のアクセス可否状態を取得できませんでした。登録されたメディアのいくつかにアクセスできないかもしれません。 + Failed to create the host network interface <b>%1</b>. ホスト ネットワーク インターフェース<b>"%1"</b>の作成に失敗しました。 - Failed to remove the host network interface <b>%1</b>. ホスト ネットワーク インターフェース<b>"%1"</b>を取り除けませんでした。 - Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>. USB デバイス<b>"%1"</b>の仮想マシン<b>"%2"</b>への割り当てに失敗しました。 - Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>. USB デバイス<b>"%1"</b>の仮想マシン<b>"%2"</b>からの割り当て解除に失敗しました。 - Failed to create the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) for the virtual machine <b>%3</b>. 仮想マシン<b>"%3"</b>の共有フォルダ<b>"%1"</b>(参照先 <nobr><b>%2</b></nobr>)の作成に失敗しました。 @@ -5865,14 +6150,17 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシン<b>"%3"</b>の共有フォルダ<b>"%1"</b>(参照先 <nobr><b>%2</b></nobr>)の除去に失敗しました。 + <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> <p>仮想マシンの画面を<b>マウスクリック</b>するか、または<b>ホストキー</b>を押すと、仮想マシンはマウスポインタ(マウス統合機能がゲストOSでサポートされていないときだけ)とキーボードを<b>キャプチャ</b>します。仮想マシンにキーボードとマウスがキャプチャされるとホストPCで動作する他のアプリケーションは利用できません。</p><p></p><p><b>ホストキー</b>を押すと、キーボードとマウス(キャプチャされているとき)は<b>キャプチャ解除</b>され、通常の操作に戻ることができます。現在割り当てられているホストキーは仮想マシンのウィンドウ下部のステータスバーに&nbsp;<img src=hostkey_16px.png/>&nbsp;アイコンで表示されます。このアイコンはマウスアイコンと共に現在のキーボ−ドとマウスのキャプチャ状態を表示します。.</p> + <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> <p><b>キーボードの自動キャプチャ</b>機能が有効です。仮想マシンのウィンドウがアクティブのとき、仮想マシンはキーボードを自動的に<b>キャプチャ</b>します。キーボードがキャプチャされると、すべてのキーストローク(Alt-Tabなどを含む)が仮想マシンに送られるため、ホストPCで動作する他のアプリケーションは利用できません。</p><p><b>ホストキー</b>を押すと、キーボードとマウス(キャプチャされているとき)は<b>キャプチャ解除</b>され、通常の操作に戻ることができます。現在割り当てられているホストキーは仮想マシンのウィンドウ下部のステータスバーに&nbsp;<img src=hostkey_16px.png/>&nbsp;アイコンで表示されます。このアイコンはマウスアイコンと共に現在のキーボ−ドとマウスのキャプチャ状態を表示します。 + <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> <p>ゲストOSで<b>マウス統合</b>機能がサポートされています。ゲストOSでマウスポインタを<i>キャプチャ</i>することなく使用できます。仮想マシンの画面上にマウスポインタがあるとき、すべてのマウスの動作は直接ゲストOSに送られます。現在マウスがキャプチャされているときは、自動的にキャプチャ解除されます。ステータスバーのマウスアイコンは、マウス統合機能がゲストOSでサポートされ、現在有効であることを示すため&nbsp;<img src=mouse_seamless_16px.png/>&nbsp;のように表示されます。 </p><p><b>注</b>: マウス統合機能が有効なとき、いくつかのアプリケーションの動作が不正になるかもしれません。メニューバーから対応する動作を選択して現在のセッションのマウス統合機能を無効化(または有効化)することができます。</p> @@ -5940,7 +6228,7 @@ step and attach hard disks later using the VM Settings dialog.</p> Result&nbsp;Code: error info - 終了コード: + 終了コード&nbsp;: @@ -6022,11 +6310,13 @@ step and attach hard disks later using the VM Settings dialog.</p><p>VirtualBox Guest Additions CDイメージを<nobr><a href="%1">%2</a></nobr>からダウンロードし、<nobr><b>%3</b>に保存しました。</nobr></p><p>CDイメージを登録し、仮想CD/DVDドライブにマウントしますか?</p> + <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> <p>仮想マシンのウィンドウを"フルスクリーン"モードに切り替えます。<b>%1</b>キーを押すといつでもウィンドウモードに戻ることができます。注:ホストキーは現在<b>%2</b>に割り当てられています。</p><p> 注:フルスクリーンモードではメインメニューバーは表示されません。メニューバーにアクセスするには <b>Host+Home</b>キーを押してください。</p> + <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> <p>仮想マシンのウィンドウを"シームレス"モードに切り替えます。<b>%1</b>キーを押すといつでもウィンドウ表示に戻ることができます。注:ホストキーは現在<b>%2</b>に割り当てられています。</p><p>注:シームレスモードではメインメニューバーは表示されません。メニューバーにアクセスするには <b>Host+Home</b>キーを押してください。</p> @@ -6036,6 +6326,7 @@ step and attach hard disks later using the VM Settings dialog.</p><p>仮想マシンウィンドウは<b>%1&nbsp;ビット</b>カラーモードに最適化されますが、現在仮想ディスプレイは<b>%2&nbsp;ビット</b>に設定されています。</p><p>最良の仮想ビデオサブシステム性能を得るため、利用可能であるならばゲストOSの画面設定ダイアログを開き、<b>%3&nbsp;ビット</b>カラーモードを選択してください。</p><p><b>注:OS/2など、いくつかのオペレーティングシステムは32&nbsp;ビットモードの動作を24&nbsp;ビット(約1600万色)として報告します。 このメッセージが消えるか、またはゲストOSで必要な色深度(%4&nbsp;ビット) が利用できないことが分かっているならば、単にメッセージを無効にできるか確認するために異なった色深度を選択することができます。</p> + <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> <p>仮想マシン実行中に重大なエラーが発生したため、仮想マシンは停止しました。</p><p>問題の解決のため、<a href=http://www.virtualbox.org>http://www.virtualbox.org</a>のCommunityセクションを参照するか、サポート契約を締結してください。あなたがエラー発生時に行った操作と共に、<nobr><b>%1</b></nobr>ディレクトリに格納されているログファイル(<tt>VBox.log</tt>)とイメージファイル(<tt>VBox.png</tt>)を提供してください。注:VirualBoxメインウィンドウの<b>[仮想マシン]</b>メニューから[ログを参照]を選択して、上記ファイルにアクセスすることができます。</p><p>仮想マシンを電源オフするには<b>[OK]</b>ボタンをクリックしてください。このままデバッグを行うには<b>[無視]</b>ボタンをクリックしてください。デバッグには特別な知識とツールを必要とするため、<b>[OK]</b>ボタンをクリックすることを推奨します。</p> @@ -6060,6 +6351,7 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシン<b>"%1"</b>への電源ボタン オフのACPIイベント送信に失敗しました。 + <p>Failed to connect to the VirtualBox online registration service.</p><p>%1</p> <p>VirtualBox オンライン登録サービスへの接続に失敗しました。</p><p>%1</p> @@ -6069,6 +6361,7 @@ step and attach hard disks later using the VM Settings dialog.</p><p>VirtualBox のユーザー登録が完了しました。</p><p>登録フォームに書き込む時間を割いてくださり、ありがとうございました!</p> + <p>Failed to register the VirtualBox product</p><p>%1</p> <p>VirtualBox の製品登録に失敗しました</p><p>%1</p> @@ -6118,27 +6411,32 @@ step and attach hard disks later using the VM Settings dialog.</p>破棄 + Continue detach image 続ける + <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> <p>ハードディスクイメージファイル<nobr><b>"%1"</b>を削除しますか?</nobr></p> <p><b>[削除]</b>を選択すると、イメージファイルはリストから取り除かれた後、永久に削除されます。この操作は元に戻せません。</p> <p><b>[登録解除]</b>を選択すると、仮想ハードディスクはリストから取り除かれますが、イメージファイルは物理ディスク上に残されます。</p> + Delete hard disk 削除 + Unregister hard disk 登録解除 + <p>There are hard disks attached to SATA ports of this virtual machine. If you disable the SATA controller, all these hard disks will be automatically detached.</p><p>Are you sure that you want to disable the SATA controller?</p> <p>この仮想マシンのSATAポートに割り当てられたハードディスクがあります。SATA コントローラを無効にすると、それらのハードディスクは自動的に割り当て解除されます。</p> <p>SATA コントローラを無効にしますか?</p> @@ -6150,10 +6448,12 @@ step and attach hard disks later using the VM Settings dialog.</p>無効 + 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>. ハードディスクイメージ(UUID %1)の、仮想マシン<b>"%5"</b>のバス %4 のチャンネル %3 のデバイススロット %2 への割り当てに失敗しました。 + Failed to detach a hard disk image from device slot %1 on channel %2 of the %3 bus of the machine <b>%4</b>. ハードディスクイメージの、仮想マシン<b>"%4"</b>のバス %3 のチャンネル %2 のデバイススロット %1 からの割り当て解除に失敗しました。 @@ -6170,7 +6470,6 @@ step and attach hard disks later using the VM Settings dialog.</p>マウント - <p>The host key is currently defined as <b>%1</b>.</p> additional message box paragraph @@ -6183,6 +6482,7 @@ step and attach hard disks later using the VM Settings dialog.</p>キャプチャ + <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>Check</b> to open the Virtual Disk Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p> <p>登録された一つ以上の仮想ハードディスク、CD/DVDまたはフロッピーメディアのに現在アクセスできません。アクセス可能になるまでこれらのメディアを使用する仮想マシンを操作できません。</p> <p><b>[確認]</b>ボタンをクリックして仮想ディスクマネージャを起動し、どのメディアにアクセスできないのか確認してください。または<b>[無視]</b>ボタンをクリックして、このメッセージを無視してください。</p> @@ -6194,6 +6494,7 @@ step and attach hard disks later using the VM Settings dialog.</p>確認 + <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> <p>次のVirtualBox設定ファイルは自動的にバージョン <b>%1</b> の新しい設定ファイル形式に変換されました。</p> <p>しかしながら、変換後のファイルはまだディスクに保存されていません。ボタンをクリックしてください:</p> @@ -6203,16 +6504,19 @@ step and attach hard disks later using the VM Settings dialog.</p> + &Save warnAboutAutoConvertedSettings message box 保存(&S) + &Backup warnAboutAutoConvertedSettings message box バックアップ(&B) + Cancel warnAboutAutoConvertedSettings message box キャンセル @@ -6258,16 +6562,19 @@ step and attach hard disks later using the VM Settings dialog.</p>ファイル<b><nobr>"%1"</nobr></b>の<b><nobr>"%2"</nobr></b>へのコピーに失敗しました(%3)。 + <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> <p>新規の割り当てに利用できる未使用のハードディスクがありません。</p> <p><b>[作成]</b>ボタンをクリックし、<i>新規仮想ディスク作成ウィザード</i>を起動して新規ハードディスクイメージを作成するか、<b>[選択]</b>ボタンをクリックして、<i>仮想ディスクマネージャ</i>を開き、動作を選択してください。</p> + &Create hard disk 作成(&C) + Select hard disk 選択 @@ -6283,6 +6590,7 @@ step and attach hard disks later using the VM Settings dialog.</p><p>ゲストOSのビデオメモリ不足のため、ゲスト画面をフルスクリーンモードに切り替えできません。</p><p>仮想マシンの設定でビデオメモリを <b>%1</b>以上に設定してください。</p><p><b>[無視]</b>ボタンをクリックしてフルスクリーンモードに切り換えるか、<b>[キャンセル]</b>ボタンをクリックして操作を取り消してください。</p> + <p>Unable to obtain the new version information due to the following network error:</p><p><b>%1</b></p> <p>ネットワークエラーのため、新しいバージョン情報を取得できません:</p><p><b>%1</b></p> @@ -6446,6 +6754,7 @@ step and attach hard disks later using the VM Settings dialog.</p>ハードディスク ストレージ装置<b>"%1"</b>の削除に失敗しました。 + <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> <p>新規の割り当てに利用できる未使用のハードディスクがありません。</p><p><b>[作成]</b>ボタンをクリックし、<i>新規仮想ディスク作成ウィザード</i>を起動して新規ハードディスクイメージを作成するか、<b>[選択]</b>ボタンをクリックして、<i>仮想メディアマネージャ</i>を開き、動作を選択してください。</p> @@ -6455,18 +6764,22 @@ step and attach hard disks later using the VM Settings dialog.</p>ハードディスク ストレージ<nobr><b>"%1"</b>の作成に失敗しました。</nobr> + Failed to attach the hard disk <nobr><b>%1</b></nobr> to slot <i>%2</i> of the machine <b>%3</b>. ハードディスク<nobr><b>"%1"</b></nobr>の、仮想マシン<b>"%3"</b>のスロット<i>"%2"</i> への割り当てに失敗しました。 + Failed to detach the hard disk <nobr><b>%1</b></nobr> from slot <i>%2</i> of the machine <b>%3</b>. ハードディスク<nobr><b>"%1"</b></nobr>の、仮想マシン<b>"%3"</b>のスロット<i>"%2"</i> への割り当て解除に失敗しました。 + Failed to mount the %1 <nobr><b>%2</b></nobr> on the machine <b>%3</b>. "%1 <nobr><b>%2</b></nobr>"の、仮想マシン<b>"%3"</b>へのマウントに失敗しました。 + Failed to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>. "%1 <nobr><b>%2</b></nobr>"の、仮想マシン<b>"%3"</b>からのマウント解除に失敗しかました。 @@ -6501,28 +6814,34 @@ step and attach hard disks later using the VM Settings dialog.</p><p>一つ以上の仮想ハードディスク、CD/DVDまたはフロッピーメディアのに現在アクセスできません。アクセス可能になるまでこれらのメディアを使用する仮想マシンを操作できません。</p><p><b>[確認]</b>ボタンをクリックして仮想メディアマネージャを起動し、どのメディアにアクセスできないのか確認してください。または<b>[無視]</b>ボタンをクリックして、このメッセージを無視してください。</p> + <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> <p>既存のVirtualBox設定ファイルは古い形式からVirtualBoxの新バージョンに必要な形式に自動変換されました。</p><p>すぐにVirtualBoxを起動するには<b>[OK]</b>ボタンをクリックしてください。変換された設定ファイルについて、詳しい情報を得たい場合は<b>[詳細]</b>ボタンをクリックしてください。</p><p><b>[終了]</b>ボタンをクリックすると、変換結果をディスクに保存することなく、VirtualBoxアプリケーションを終了します。</p> + &More warnAboutAutoConvertedSettings message box 詳細(&M) + E&xit warnAboutAutoConvertedSettings message box 終了(&X) + <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> <p>次のVirtualBox設定ファイルは自動的にバージョン <b>"%1"</b> の新しい設定ファイル形式に変換されました。</p><p>しかしながら、変換後のファイルはまだディスクに保存されていません。ボタンをクリックしてください:</p><ul><li><b>[バックアップ]</b>: 新しい形式で設定ファイルを保存する前に、古い形式で設定ファイルのバックアップコピーを作成します。</li><li><b>[上書き]</b>:バックアップコピーを作成せずに、すべての変換済みファイルを保存します。(旧バージョンのVirtualBoxでこれらの設定ファイルは使用できません)</li>%2</ul><p>(必要ならば) 旧バージョンのVirtualBoxに現在の設定を失うことなく戻ることができるので、<b>[バックアップ]</b> を選択することを推奨します。ダウングレードに関する詳細はVirtualBoxマニュアルを参照してください。</p> + <li><b>Exit</b> to terminate VirtualBox without saving the results of the conversion to disk.</li> <li><b>[終了]</b>:変換結果をディスクに保存せずにVirtualBoxを終了します。</li> + O&verwrite warnAboutAutoConvertedSettings message box 上書き(&V) @@ -6533,23 +6852,27 @@ step and attach hard disks later using the VM Settings dialog.</p><p>仮想マシン実行中に重大なエラーが発生したため、仮想マシンは停止しました。</p><p>問題の解決のため、<a href=http://www.virtualbox.org>http://www.virtualbox.org</a>のCommunityセクションを参照するか、サポートに連絡してください。あなたがエラー発生時に行った操作と共に、<nobr><b>%1</b></nobr>ディレクトリに格納されているログファイル(<tt>VBox.log</tt>)とイメージファイル(<tt>VBox.png</tt>)を提供してください。注:VirualBoxメインウィンドウの<b>[仮想マシン]</b>メニューから[ログを参照]を選択して、上記ファイルにアクセスすることができます。</p><p>仮想マシンを電源オフするには<b>[OK]</b>ボタンをクリックしてください。このままデバッグを行うには<b>[無視]</b>ボタンをクリックしてください。デバッグには特別な知識とツールを必要とするため、<b>[OK]</b>ボタンをクリックすることを推奨します。</p> + hard disk failed to close ... ハードディスク + CD/DVD image failed to close ... CD/DVDイメージ + floppy image failed to close ... フロッピーイメージ + 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. - ファイル名<b>"%1"</b>はすでに使われています。ファイルを置き換えますか?<br /><br />ファイルは"%2"に存在します。ファイルの内容は上書きされます。 + ファイル名<b>"%1"</b>はすでに使われています。ファイルを置き換えますか?<br /><br />ファイルは"%2"に存在します。ファイルの内容は上書きされます。 @@ -6582,27 +6905,26 @@ step and attach hard disks later using the VM Settings dialog.</p><p>仮想化支援機能(VT-x/AMD-V)を有効化できません。64ビット ゲストOSは64ビットCPUを検出できず、起動できません。</p><p>ホストマシンのBIOS設定でVT-x/AMD-Vを有効化してください。</p> - Close VM 仮想マシンを閉じる - Continue 続ける + <p>Are you sure you wish to delete the selected snapshot and saved state?</p> <p>選択されたスナップショットと保存された状態を削除しますか?</p> + Discard 破棄 - Cancel キャンセル @@ -6624,11 +6946,11 @@ step and attach hard disks later using the VM Settings dialog.</p>変更 + <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> - <p>選択したホスト ネットワーク インターフェース ;<nobr><b>"%1"</b>を除去しますか?</nobr></p><p><b>注:</b> このインターフェースは複数の仮想マシンの1つ以上のネットワーク アタプタで使用中かもしれません。除去すると、他のインターフェース名を選ぶか、別の割り当て方法を正しく設定するまでそれらのアダプタは動作しません。</p> + <p>選択したホスト ネットワーク インターフェース ;<nobr><b>"%1"</b>を除去しますか?</nobr></p><p><b>注:</b> このインターフェースは複数の仮想マシンの1つ以上のネットワーク アタプタで使用中かもしれません。除去すると、他のインターフェース名を選ぶか、別の割り当て方法を正しく設定するまでそれらのアダプタは動作しません。</p> - Failed to create the host-only network interface. ホストオンリー ネットワーク インターフェースの作成に失敗しました。 @@ -6659,7 +6981,6 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想アプライアンスの作成に失敗しました。 - Failed to prepare the export of the appliance <b>%1</b>. 仮想アプライアンス<b>"%1"</b>のエクスポートの前処理に失敗しました。 @@ -6682,7 +7003,7 @@ step and attach hard disks later using the VM Settings dialog.</p> A file named <b>%1</b> already exists. Are you sure you want to replace it?<br /><br />Replacing it will overwrite its contents. - ファイル名<b>"%1"</b>はすでに使われています。ファイルを置き換えますか?<br /><br />ファイルの内容は上書きされます。 + ファイル名<b>"%1"</b>はすでに使われています。ファイルを置き換えますか?<br /><br />ファイルの内容は上書きされます。 @@ -6740,13 +7061,11 @@ step and attach hard disks later using the VM Settings dialog.</p>削除 - Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>. 仮想マシン<b>"%2"</b>のスナップショット<b>"%1"</b>への復元に失敗しました。 - Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>. 仮想マシン<b>"%2"</b>のスナップショット<b>"%1"</b>の削除に失敗しました。 @@ -6763,7 +7082,6 @@ step and attach hard disks later using the VM Settings dialog.</p>作成(&C) - &Select medium @@ -6777,13 +7095,13 @@ step and attach hard disks later using the VM Settings dialog.</p> <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> - + <p>CD/DVD-ROM デバイスを削除しますか?</p><p>デバイスがない場合、CD/DVDメディアやISOイメージファイルのマウントおよびGuest Additions のインストールはできません!</p> &Remove medium - + 除去(&R) @@ -6803,7 +7121,7 @@ step and attach hard disks later using the VM Settings dialog.</p> Would you like to force mounting of this medium? - メディアを強制マウントしますか? + メディアを強制マウントしますか? @@ -6813,7 +7131,7 @@ step and attach hard disks later using the VM Settings dialog.</p> Would you like to force unmounting of this medium? - メディアを強制マウント解除しますか? + メディアを強制マウント解除しますか? @@ -6831,7 +7149,6 @@ step and attach hard disks later using the VM Settings dialog.</p><p>仮想マシン<b>"%1"</b>がCD/DVD-ROMドライブを持たないため、VirtualBox Guest AdditionsのインストールCDイメージを仮想マシンにインサートできません。 仮想マシン設定ダイアログの[ストレージ]ページでドライブを追加してください。</p> - E&xit warnAboutSettingsAutoConversion message box @@ -6899,58 +7216,72 @@ step and attach hard disks later using the VM Settings dialog.</p>キャンセル(&C) + Time remaining: %1 残り時間: %1 + %1 days, %2 hours remaining 残り時間 %1日と %2時間 + %1 days, %2 minutes remaining 残り時間 %1日と %2分 + %1 days remaining 残り時間 %1日 + 1 day, %1 hours remaining 残り時間 1日と %1時間 + 1 day, %1 minutes remaining 残り時間 1日と %1分 + 1 day remaining 残り時間 1日 + %1 hours, %2 minutes remaining 残り時間 %1時間と %2分 + 1 hour, %1 minutes remaining 残り時間 1時間と %1分 + 1 hour remaining 残り時間 1時間 + %1 minutes remaining 残り時間 %1分 + 1 minute, %2 seconds remaining 残り時間 1分と %2秒 + 1 minute remaining 残り時間 1分 + %1 seconds remaining 残り時間 %1秒 @@ -6973,13 +7304,13 @@ step and attach hard disks later using the VM Settings dialog.</p> %1, %2 remaining You may wish to translate this more like "Time remaining: %1, %2" - + 残り時間:%1, %2 %1 remaining You may wish to translate this more like "Time remaining: %1" - + 残り時間:%1 @@ -6990,31 +7321,27 @@ step and attach hard disks later using the VM Settings dialog.</p>VirtualBox 登録ダイアログ + &Name 名前(&N) - - - - - - Enter your full name using Latin characters. フルネームを英字で入力してください。 + &E-mail メールアドレス(&E) - Enter your e-mail address. Please use a valid address here. メールアドレスを入力してください。 + &Please do not use this information to contact me 情報メール不要(&P) @@ -7024,14 +7351,17 @@ step and attach hard disks later using the VM Settings dialog.</p>ようこそ VirtualBox 登録フォームへ! + &Confirm 確認(&C) + Connection timed out. 接続がタイムアウトになりました。 + Could not locate the registration form on the server (response: %1). サーバー上に登録フォームが見つかりませんでした(応答: %1)。 @@ -7041,14 +7371,17 @@ step and attach hard disks later using the VM Settings dialog.</p>接続を確立できませんでした。 + <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> <p>登録フォームに入力し、あなたが VirtualBox を使用していることを我々に知らせてください。VirtualBox のニュースと更新情報をお知らせします(任意)。</p><p>フルネーム(英字)とメールアドレスを下のフィールドに入力してください。注:Sun Microsystems は、この情報を製品使用の統計を収集し、VirtualBox ニュースレターを送信するためだけに使用します。Sun Microsystems が個人情報を第三者に渡すことはありません。個人情報の扱いに関する詳細情報は、VirtualBox マニュアルの"<b>Privacy Policy</b>" セクションまたは VirtualBox webサイトの"<a href=http://www.virtualbox.org/wiki/PrivacyPolicy>Privacy Policy</a>"ページを参照してください。</p> + Check this box if you do not want to receive mail from Sun Microsystems at the e-mail address specified above. Sun Microsystems からの情報メールを受け取りたくない場合、チェックボックスをオンにしてください。 + C&onfirm 確認(&O) @@ -7136,14 +7469,17 @@ step and attach hard disks later using the VM Settings dialog.</p>共有フォルダ + Cancel キャンセル + Help ヘルプ + &OK OK(&O) @@ -7158,12 +7494,12 @@ step and attach hard disks later using the VM Settings dialog.</p> Click to view non-scaled screenshot. - クリックしてスクリーンショットを表示します。 + クリックして実寸のスクリーンショットを表示します。 Click to view scaled screenshot. - クリックして実寸のスクリーンショットを表示します。 + クリックしてスクリーンショットを表示します。 @@ -7179,25 +7515,28 @@ step and attach hard disks later using the VM Settings dialog.</p>詳細(&D) + Virtual &Disk Manager... 仮想ディスクマネージャ(&D)... + Ctrl+D Ctrl+D + Display the Virtual Disk Manager dialog 仮想ディスクマネージャ ダイアログを表示 - &Preferences... global settings 環境設定(&P)... + Ctrl+G Ctrl+G @@ -7212,6 +7551,7 @@ step and attach hard disks later using the VM Settings dialog.</p>終了(&X) + Ctrl+Q Ctrl+Q @@ -7226,10 +7566,12 @@ step and attach hard disks later using the VM Settings dialog.</p>新規(&N)... + New 新規 + Ctrl+N Ctrl+N @@ -7244,10 +7586,12 @@ step and attach hard disks later using the VM Settings dialog.</p>設定(&S)... + Settings 設定 + Ctrl+S Ctrl+S @@ -7262,6 +7606,7 @@ step and attach hard disks later using the VM Settings dialog.</p>削除(&D) + Delete 削除 @@ -7276,6 +7621,7 @@ step and attach hard disks later using the VM Settings dialog.</p>破棄(&I) + Discard 破棄 @@ -7285,14 +7631,17 @@ step and attach hard disks later using the VM Settings dialog.</p>選択した仮想マシンを破棄 + &Refresh 最新の情報に更新(&R) + Refresh 最新の情報に更新 + Ctrl+R Ctrl+R @@ -7302,38 +7651,47 @@ step and attach hard disks later using the VM Settings dialog.</p>選択した仮想マシンのアクセス可否状態を最新の情報に更新する + &Contents... ヘルプを表示(&C)... + F1 F1 + Show the online help contents オンラインヘルプを表示 + &VirtualBox Web Site... VirtualBox Webサイト(&V)... + Open the browser and go to the VirtualBox product web site WebブラウザでVirtualBox製品のWebサイトを開く + &About VirtualBox... VirtualBox について(&A)... + Show a dialog with product information 製品情報ダイアログを表示 + &Reset All Warnings すべての警告をリセット(&R) + Go back to showing all suppressed warnings and messages すべての抑止された警告とメッセージを再度表示させる @@ -7348,13 +7706,11 @@ step and attach hard disks later using the VM Settings dialog.</p>ヘルプ(&H) - &Snapshots スナップショット(&S) - D&escription 説明(&E) @@ -7370,6 +7726,7 @@ step and attach hard disks later using the VM Settings dialog.</p>表示(&H) + Show 表示 @@ -7379,24 +7736,24 @@ step and attach hard disks later using the VM Settings dialog.</p>選択した仮想マシンのウィンドウに切り替え - S&tart 起動(&T) + Start 起動 - Start the selected virtual machine 選択した仮想マシンを起動 + <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> - <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> + <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> @@ -7409,10 +7766,12 @@ step and attach hard disks later using the VM Settings dialog.</p>ログを参照(&L)... + Show Log... ログを参照... + Ctrl+L Ctrl+L @@ -7422,10 +7781,12 @@ step and attach hard disks later using the VM Settings dialog.</p>選択した仮想マシンのログファイルを参照する + R&egister VirtualBox... VirtualBox を登録(&E)... + Open VirtualBox registration form VirtualBox 登録フォームを開く @@ -7435,10 +7796,12 @@ step and attach hard disks later using the VM Settings dialog.</p>再開(&E) + Resume 再開 + Ctrl+P Ctrl+P @@ -7448,17 +7811,16 @@ step and attach hard disks later using the VM Settings dialog.</p>仮想マシンの実行を再開する - &Pause 一時停止(&P) + Pause 一時停止 - Suspend the execution of the virtual machine 仮想マシンの実行を一時停止する @@ -7546,18 +7908,22 @@ step and attach hard disks later using the VM Settings dialog.</p> VBoxSharedFoldersSettings + Name 名前 + Path パス + Shared &Folders 共有フォルダ(&F) + <qt>Lists all shared folders accessible to this machine. Use <tt>net use x: \\vboxsvr\share</tt> @@ -7570,63 +7936,78 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs 本機能を使用するには Guest Additions のインストールが必要です。</qt> + Adds a new shared folder definition. 新規共有フォルダを追加します。 + Removes the selected shared folder definition. 選択した共有フォルダの設定を削除します。 + Machine Folders 共有フォルダ + Transient Folders 一時的な共有フォルダ + Edits the selected shared folder definition. 選択した共有フォルダの設定を編集します。 + VBoxSharedFoldersSettings don't translate VBoxSharedFoldersSettings + Ins Ins + Add a new shared folder (Ins) 新規共有フォルダを追加(Ins) + Del Del + Remove the selected shared folder (Del) 選択した共有フォルダを削除(Del) + Access アクセス権 + Ctrl+Space Ctrl+スペース + Edit the selected shared folder (Ctrl+Space) 選択した共有フォルダの設定を編集(Ctrl+スペース) + Full 完全 + Read-only 読み込み専用 @@ -7634,38 +8015,47 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs VBoxSnapshotDetailsDlg + VBoxSnapshotDetailsDlg VBoxSnapshotDetailsDlg + Snapshot Details スナップショット詳細 + &Name 名前(&N) + &Description 説明(&D) + &Machine Details 仮想マシン詳細(&M) + Help ヘルプ + F1 F1 + &OK OK(&O) + Cancel キャンセル @@ -7675,6 +8065,7 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs %1 (%2)の詳細 + Snapshot Details スナップショット詳細 @@ -7707,6 +8098,7 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs VBoxSnapshotsWgt + [snapshot] [snapshot] @@ -7716,26 +8108,32 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs VBoxSnapshotsWgt + snapshotActionGroup snapshotActionGroup + Discard Snapshot スナップショットを破棄 + &Discard Snapshot スナップショットを破棄(&D) + Ctrl+Shift+D Ctrl+Shift+D + curStateActionGroup curStateActionGroup + Take Snapshot スナップショット作成 @@ -7745,14 +8143,17 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs スナップショット作成(&S) + Discard Current Snapshot and State 最新のスナップショットと状態を破棄 + D&iscard Current Snapshot and State 最新のスナップショットと状態を破棄(&I) + Show Details 詳細を表示 @@ -7784,12 +8185,9 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs 最新の状態は最新のスナップショットに保存されている状態と同じです - - - (%1 ago) - + (%1前) @@ -7833,10 +8231,12 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs スナップショット %1 + Discard the selected snapshot of the virtual machine 選択した仮想マシンのスナップショットを破棄 + Ctrl+Shift+S Ctrl+Shift+S @@ -7846,26 +8246,32 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs 現在の仮想マシンの状態のスナップショットを作成 + Revert to Current Snapshot 最新のスナップショットの状態に戻す + &Revert to Current Snapshot 最新のスナップショットの状態に戻す(&R) + Ctrl+Shift+R Ctrl+Shift+R + Restore the virtual machine state from the state stored in the current snapshot 仮想マシンの状態を最新のスナップショットに保存された状態に復元 + Ctrl+Shift+B Ctrl+Shift+B + Discard the current snapshot and revert the machine to the state it had before the snapshot was taken 最新のスナップショットを破棄し、スナップショットを作成する前の状態に戻す @@ -7875,6 +8281,7 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs 選択したスナップショットの詳細を表示 + Ctrl+Space Ctrl+スペース @@ -7884,24 +8291,28 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs (%1) + (%n day(s) ago) (%n 日前) + (%n hour(s) ago) (%n 時間前) + (%n minute(s) ago) (%n 分前) + (%n second(s) ago) (%n 秒前) @@ -7941,6 +8352,7 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs 有効 + %1 %2 %1 %2 @@ -7963,26 +8375,30 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs スナップショットの説明(&D) + Help ヘルプ + F1 F1 + &OK OK(&O) + Cancel キャンセル 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. - - + + 警告:%n 個の変更不可の仮想ディスクを割り当てた仮想マシンのスナップショットを作成しています。データ喪失を避けるため、このスナップショットから起動する限り、仮想ディスクはリセットされません。 @@ -8046,70 +8462,86 @@ DOS系ゲストOSからアクセスする場合は <tt>net use x:¥¥vboxs VBoxUSBFilterSettings + VBoxUSBFilterSettings don't translate VBoxUSBFilterSettings + &Name 名前(&N) + Displays the filter name. フィルタ名を表示します。 + &Manufacturer メーカー(&M) + Pro&duct 製品名(&D) + &Serial No. シリアル No.(&S) + R&emote リモート(&E) + &Action 動作(&A) + &Vendor ID ベンダーID(&V) + &Product ID プロダクトID(&P) + &Revision リビジョン(&R) + Por&t ポート(&T) + Any remote 任意 + Yes remote はい + No remote いいえ + <qt>Defines the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</qt> @@ -8117,6 +8549,7 @@ value.</qt> 空の文字列はすべての値と一致します。</qt> + <qt>Defines the product name filter as an <i>exact match</i> string. An empty string will match any value.</qt> @@ -8124,6 +8557,7 @@ value.</qt> 空の文字列はすべての値と一致します。</qt> + <qt>Defines the serial number filter as an <i>exact match</i> string. An empty string will match any value.</qt> @@ -8131,6 +8565,7 @@ value.</qt> 空の文字列はすべての値と一致します。</qt> + <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>), @@ -8140,6 +8575,7 @@ or both (<i>Any</i>).</qt> 両方((<i>任意</i>))。</qt> + <qt>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 @@ -8148,6 +8584,7 @@ computer when a matching device is attached: give it up to the host OS ホストOSに譲る(<i>無視</i>) 、仮想マシンで使用するために捕捉(<i>保持</i>)。</qt> + <qt>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 @@ -8157,6 +8594,7 @@ value.</qt> 空の文字列はすべての値と一致します。</qt> + <qt>Defines the product 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 @@ -8166,6 +8604,7 @@ value.</qt> 空の文字列はすべての値と一致します。</qt> + <qt>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> @@ -8177,6 +8616,7 @@ value.</qt> 空の文字列はすべての値と一致します。</qt> + <qt>Defines the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</qt> @@ -8257,10 +8697,12 @@ value.</qt> 確認しない + Connection timed out. 接続がタイムアウトになりました。 + Could not locate the latest version list on the server (response: %1). サーバー上に最新バージョンが見つかりませんでした(応答: %1)。 @@ -8285,6 +8727,7 @@ value.</qt> アップデートを確認 + <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> @@ -8339,6 +8782,7 @@ value.</qt> 編集(Ctrl+E) + Ctrl+E Ctrl+E @@ -8399,14 +8843,17 @@ value.</qt> メディア ソース + &Host Drive ホスト デバイス(&H) + &Image File イメージファイル(&I) + VDM VDM @@ -8441,10 +8888,12 @@ value.</qt> フロッピー デバイス + Host Drive %1 ホスト ドライブ %1 + <table><tr><td>Type:</td><td>%1</td></tr><tr><td>Source:</td><td>%2</td></tr></table> <table><tr><td>タイプ:</td><td>%1</td></tr><tr><td>ソース:</td><td>%2</td></tr></table> @@ -8475,19 +8924,17 @@ value.</qt> <p>上記が正しいなら、<b>[完了]</b>ボタンをクリックしてください。 選択されたメディアは仮想マシンに取り付けられ、仮想マシンは実行を開始します。</p> - - < &Back < 戻る(&B) - &Next > 次へ(&N) > + <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;"> @@ -8514,8 +8961,6 @@ p, li { white-space: pre-wrap; } ソース - - Cancel キャンセル @@ -8524,10 +8969,12 @@ p, li { white-space: pre-wrap; } VBoxVMInformationDlg + Session Information Dialog セッション情報ダイアログ + &Close 閉じる(&C) @@ -8537,19 +8984,16 @@ p, li { white-space: pre-wrap; } %1 - セッション情報 - &Details 詳細(&D) - &Runtime ランタイム(&R) - DMA Transfers DMA 転送 @@ -8560,15 +9004,11 @@ p, li { white-space: pre-wrap; } PIO 転送 - - Data Read データ読み込み - - Data Written データ書き込み @@ -8594,10 +9034,12 @@ p, li { white-space: pre-wrap; } 画面解像度 + CD/DVD-ROM Statistics CD/DVD-ROM 統計 + Network Adapter Statistics ネットワーク アダプタ統計 @@ -8630,10 +9072,12 @@ p, li { white-space: pre-wrap; } ゲストOSのタイプ + Hard Disk Statistics ハードディスク統計 + No Hard Disks ハードディスクなし @@ -8660,10 +9104,12 @@ p, li { white-space: pre-wrap; } ネステッドページング + Enabled 有効 + Disabled 無効 @@ -8697,16 +9143,19 @@ p, li { white-space: pre-wrap; } VBoxVMListBox + <nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr> VM tooltip (name, last state change, session state) <nobr>%1<br></nobr><nobr>%3からの状態 %2</nobr><br><nobr>セッション %4</nobr> + <nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr> Inaccessible VM tooltip (name, last state change) <nobr><b>%1</b><br></nobr><nobr>%2からの状態 アクセスできません</nobr> + Inaccessible アクセスできません @@ -8741,13 +9190,11 @@ p, li { white-space: pre-wrap; } 選択した仮想マシンのウィンドウに切り替え - S&tart 起動(&T) - Start the selected virtual machine 選択した仮想マシンを起動 @@ -8806,10 +9253,12 @@ p, li { white-space: pre-wrap; } 名前をつけてVirtualBox ログを保存 + Help ヘルプ + F1 F1 @@ -8827,118 +9276,147 @@ p, li { white-space: pre-wrap; } VBoxVMNetworkSettings + VBoxVMNetworkSettings VBoxVMNetworkSettings + &Enable Network Adapter ネットワーク アダプタを有効化(&E) + &Attached to 割り当て(&A) + &MAC Address MACアドレス(&M) + &Generate 生成(&G) + Generates a new random MAC address. MACアドレスをランダムに生成します。 + Ca&ble Connected 接続(&B) + Host Interface Settings ホスト インターフェースの設定 + &Interface Name インターフェース名(&I) + &File Descriptor ファイル識別子(&F) + &Setup Application 設定アプリケーション(&S) + Select 選択 + &Terminate Application 終了アプリケーション(&T) + Select TAP setup application TAP設定アプリケーションを選択 + Select TAP terminate application TAP終了アプリケーションを選択 + When checked, plugs this virtual network adapter into the virtual machine. 仮想ネットワーク アダプタを仮想マシンに接続します。 + Controls how this virtual adapter is attached to the real network of the Host OS. 仮想アダプタをホストOSの実際のネットワークに割り当てる方式を指定します。 + Indicates whether the virtual network cable is plugged in on machine startup or not. 仮想マシンの起動時に仮想ネットワークケーブルが接続されるかどうかを示します。 + Displays the name of the host interface selected for this adapter. このアダプタ用に選択したホスト インターフェース名を表示します。 + Displays the TAP interface name. TAPインターフェース名を表示します。 + Displays the command executed to set up the TAP interface. TAPインターフェース設定時に実行するコマンドを表示します。 + Selects the setup application. 設定アプリケーションを選択します。 + Displays the command executed to terminate the TAP interface. TAPインターフェース終了時に実行するコマンドを表示します。 + Selects the terminate application. 終了アプリケーションを選択します。 + 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. このアダプタのMACアドレスを表示します。MACアドレスは{0-9,A-F}から選択された12文字で構成されます。注:2番目の文字は偶数でなければなりません。 + &Network Name ネットワーク名(&N) + Adapter &Type アダプタ タイプ(&T) + Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine. 仮想ネットワークアダプタのタイプを選択します。 この値により、VirtualBoxは異なったネットワーク ハードウェアを仮想マシンに提供します。 + Displays the name of the internal network selected for this adapter. このアダプタ用に選択した内部ネットワーク名を表示します。 @@ -8946,46 +9424,57 @@ p, li { white-space: pre-wrap; } VBoxVMParallelPortSettings + VBoxVMParallelPortSettings VBoxVMParallelPortSettings + &Enable Parallel Port パラレルポートを有効化(&E) + When checked, enables the given parallel port of the virtual machine. 仮想マシンのパラレルポートを有効にします。 + Port &Number ポート番号(&N) + 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. パラレルポート番号を表示します。 標準のパラレルポートか<b>[ユーザー定義]</b>を選択し、手動でポートパラメタを指定することができます。 + &IRQ IRQ(&I) + Displays the IRQ number of this parallel 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. このパラレルポートのIRQ番号を表示します。有効値は<tt>0</tt>から<tt>255</tt>までの範囲の整数です。<tt>15</tt>以上の値はこの仮想マシンで<b>IO APIC</b>が有効なとき使用されます。 + I/O Po&rt I/Oポート(&R) + 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>. このパラレルポートのベースI/Oポートアドレスを表示します。 有効値は<tt>0</tt>から<tt>0xFFFF</tt>の範囲の整数です。 + Port &Path ポート パス(&P) + Displays the host parallel device name. ホストのパラレル デバイス名を表示します。 @@ -8993,62 +9482,77 @@ p, li { white-space: pre-wrap; } VBoxVMSerialPortSettings + VBoxVMSerialPortSettings VBoxVMSerialPortSettings + &Enable Serial Port シリアルポートを有効化(&E) + When checked, enables the given serial port of the virtual machine. 仮想マシンのシリアルポートを有効にします。 + Port &Number ポート番号(&N) + 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. シリアルポート番号を表示します。 標準のシリアルポートか<b>[ユーザー定義]</b>を選択し、手動でポートパラメタを指定することができます。 + &IRQ IRQ(&I) + 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. このシリアルポートのIRQ番号を表示します。有効値は<tt>0</tt>から<tt>255</tt>までの範囲の整数です。<tt>15</tt>以上の値はこの仮想マシンで<b>IO APIC</b>が有効なとき使用されます。 + I/O Po&rt I/Oポート(&R) + 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>. このシリアルポートのベースI/Oポートアドレスを表示します。 有効値は<tt>0</tt>から<tt>0xFFFF</tt>の範囲の整数です。 + Port &Mode ポート モード(&M) + 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. このシリアルポートの動作モードを指定します。 <b>[切断]</b>を選択すると、ゲストOSはシリアルポートを検出しますが、それを操作することはできません。 + &Create Pipe パイプ作成(&C) + 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. オンの場合、仮想マシンの起動時に <b>[ポート パス]</b>フィールドで指定されたパイプが作成されます。そうでなければ仮想マシンは既存のパイプを使用します。 + Port &Path ポート パス(&P) + 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. ポートが<b>[ホスト パイプ]</b>モードで動作しているとき、シリアルポートのパイプのパスを表示します。ポートが<b>[ホスト デバイス]</b>モードで動作しているとき、ホスト シリアル デバイス名を表示します。 @@ -9089,58 +9593,72 @@ p, li { white-space: pre-wrap; } VBoxVMSettingsCD + Host CD/DVD drive is not selected ホスト CD/DVDドライブが選択されていない + CD/DVD image file is not selected CD/DVDイメージファイルが選択されていない + 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. 指定したメディアを仮想マシンのCD/DVDドライブにマウントします。注:CD/DVDドライブは常に仮想マシンのセカンダリIDE コントローラのマスタースロットに割り当てられます。 + &Mount CD/DVD Drive CD/DVD ドライブのマウント(&M) + Mounts the specified CD/DVD drive to the virtual CD/DVD drive. 指定したCD/DVDドライブを仮想CD/DVDドライブにマウントします。 + Host CD/DVD &Drive ホスト CD/DVDドライブ(&D) + Lists host CD/DVD drives available to mount to the virtual machine. 仮想マシンにマウントするために利用可能なホストのCD/DVDドライブをリスト表示します。 + 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. ホストに接続されたCD/DVDライターを使用可能にするため、ゲストOSのATAPIコマンドを直接ホスト ドライブに送ります。注:仮想マシンから音楽CDへの書き込みはサポートされていません。 + Enable &Passthrough パススルーを有効化(&P) + Mounts the specified CD/DVD image to the virtual CD/DVD drive. 指定したCD/DVDイメージを仮想CD/DVDドライブにマウントします。 + &ISO Image File ISO イメージファイル(&I) + Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image. 仮想CD/DVDドライブにマウントされたイメージファイルを表示します。また、他のイメージを素早く選択できます。 + Invokes the Virtual Disk Manager to select a CD/DVD image to mount. 仮想ディスクマネージャを起動し、選択したCD/DVDイメージをマウントします。 + Invokes the Virtual Media Manager to select a CD/DVD image to mount. 仮想メディアマネージャを起動し、選択したCD/DVDイメージをマウントします。 @@ -9153,7 +9671,6 @@ p, li { white-space: pre-wrap; } 仮想マシンをフルスクリーンまたはシームレスモードに切り換えるために必要な値(%1)より少ないビデオメモリが仮想マシンに割り当てられました。 - <qt>%1&nbsp;MB</qt> <qt>%1&nbsp;MB</qt> @@ -9169,7 +9686,6 @@ p, li { white-space: pre-wrap; } ビデオメモリ(&M): - Controls the amount of video memory provided to the virtual machine. 仮想マシンに割り当てるビデオメモリのサイズを指定します。 @@ -9215,6 +9731,7 @@ p, li { white-space: pre-wrap; } サーバーのポート番号(&P): + Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value. VRDPサーバーのポート番号を表示します。ポートをデフォルト値にリセットするには<tt>0</tt>(ゼロ)を指定します。 @@ -9262,563 +9779,701 @@ p, li { white-space: pre-wrap; } VBoxVMSettingsDlg + Category カテゴリ + [id] [id] + [link] [link] + [name] [name] + VBoxVMSettingsDlg VBoxVMSettingsDlg + <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>. <i>左側のリストから設定のカテゴリを選択し、設定項目をマウスオーバーして詳細な情報を参照してください<i>。 + General 一般 + Hard Disks ハードディスク + Floppy フロッピー + CD/DVD-ROM CD/DVD-ROM + Audio オーディオ + Network ネットワーク + USB USB + Remote Display リモートディスプレイ + Shared Folders 共有フォルダ + &Identification ID(&I) + &Name 名前(&N) + Displays the name of the virtual machine. 仮想マシンの名前を表示します。 + OS &Type OSタイプ(&T) + Base &Memory Size メインメモリのサイズ(&M) + Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start. 仮想マシンに割り当てるメインメモリのサイズを指定します。割り当て量が多すぎると仮想マシンは起動しないかもしれません。 + < < + = = + > > + MB MB + &Video Memory Size ビデオメモリのサイズ(&V) + Controls the amount of video memory provided to the virtual machine. 仮想マシンに割り当てるビデオメモリのサイズを指定します。 + &Basic 基本(&B) + Select 選択 + Selects the snapshot folder path. スナップショットの保存先フォルダのパスを選択します。 + Reset リセット + Extended Features 拡張機能 + Enable A&CPI ACPIを有効化(&C) + Enable IO A&PIC IO APICを有効化(&P) + Boo&t Order 起動順序(&T) + &Advanced 高度(&A) + &Description コメント(&D) + &Mount Floppy Drive フロッピードライブのマウント(&M) + Host Floppy &Drive ホスト フロッピードライブ(&D) + Mounts the specified host Floppy drive to the virtual Floppy drive. 指定したホスト フロッピードライブを仮想フロッピードライブにマウントします。 + &Image File イメージファイル(&I) + Mounts the specified Floppy image to the virtual Floppy drive. 指定したフロッピーイメージを仮想フロッピードライブにマウントします。 + &Mount CD/DVD Drive CD/DVD ドライブのマウント(&M) + Host CD/DVD &Drive ホスト CD/DVDドライブ(&D) + Mounts the specified CD/DVD drive to the virtual CD/DVD drive. 指定したCD/DVDドライブを仮想CD/DVDドライブにマウントします。 + &ISO Image File ISO イメージファイル(&I) + Mounts the specified CD/DVD image to the virtual CD/DVD drive. 指定したCD/DVDイメージを仮想CD/DVDドライブにマウントします。 + &Enable Audio オーディオを有効化(&E) + Host Audio &Driver ホスト オーディオ ドライバ(&D) + Enable &USB Controller USB コントローラを有効化(&U) + USB Device &Filters USB デバイス フィルタ(&F) + Ins Ins + Alt+Ins Alt+Ins + Del Del + Ctrl+Up Ctrl+Up + Ctrl+Down Ctrl+Down + &Enable VRDP Server VRDPサーバを有効化(&E) + Defines the VRDP authentication method. VRDPの認証方式を指定します。 + Specifies the timeout for guest authentication, in milliseconds. ゲスト認証のタイムアウト値をミリ秒単位で指定します。 + Help ヘルプ + F1 F1 + Displays the dialog help. ダイアログのヘルプを表示します。 + Invalid settings detected 無効な設定が見つかりました + &OK OK(&O) + Accepts (saves) changes and closes the dialog. 変更を保存してダイアログを閉じます。 + Cancel キャンセル + Cancels changes and closes the dialog. 変更を破棄してダイアログを閉じます。 + 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. 指定したメディアを仮想マシンのCD/DVDドライブにマウントします。注:CD/DVDドライブは常に仮想マシンのセカンダリIDE コントローラのマスタースロットに割り当てられます。 + Displays the image file to mount to the virtual CD/DVD drive and allows to quickly select a different image. 仮想CD/DVDドライブにマウントされたイメージファイルを表示します。また、他のイメージを素早く選択できます。 + When checked, mounts the specified media to the Floppy drive of the virtual machine. 指定したメディアを仮想マシンのフロッピードライブにマウントします。 + Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image. 仮想フロッピードライブにマウントされたイメージファイルを表示します。また、他のイメージを素早く選択できます。 + 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. 指定されたドライバを使用してホストのオーディオカードと通信する仮想PCIオーディオカードを仮想マシンに接続します。 + 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. 仮想マシンのリモートデスクトッププロトコル(RDP)サーバ機能を有効にします。リモートクライアントが標準的なRDPクライアントを使用して実行中の仮想マシンに接続し、操作することを可能にします。 + <qt>%1&nbsp;MB</qt> <qt>%1&nbsp;MB</qt> + <not attached> hard disk <割り当てられていません> + - Settings - 設定 + New Filter %1 usb 新規フィルタ %1 + &Shared Clipboard クリップボードの共有(&S) + S&napshot Folder スナップショットの保存先(&N) + Displays the operating system type that you plan to install into this virtual machine (called a guest operating system). 仮想マシンで実行するOS(ゲストOSと呼びます)のタイプを表示します。 + <qt>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!</qt> - <qt>仮想マシンでACPI(Advanced Configuration and Power Management Interface)サポートを有効にします。<b>注:</b> Windows ゲストOSをインストールした後で本機能を無効にしないでください!</qt> + <qt>仮想マシンでACPI(Advanced Configuration and Power Management Interface)サポートを有効にします。<b>注:</b> Windows ゲストOSをインストールした後で本機能を無効にしないでください!</qt> + <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 this feature after having installed a Windows guest operating system!</qt> - <qt>仮想マシンでIO APIC(Input Output APIC)サポートを有効にします。これは仮想マシンの性能をわずかに低下させるかもしれません。<b>注:</b>Windows ゲストOSをインストールした後で本機能を無効にしないでください!</qt> + <qt>仮想マシンでIO APIC(Input Output APIC)サポートを有効にします。これは仮想マシンの性能をわずかに低下させるかもしれません。<b>注:</b>Windows ゲストOSをインストールした後で本機能を無効にしないでください!</qt> + 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. ゲストOSとホストOSの間でクリップボードを共有するモードを定義します。注:本機能の利用にはゲストOSに Guest Additions のインストールが必要です。 + Displays the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space. この仮想マシンのスナップショットの保存先パスを表示します。注:スナップショットは多くのディスク容量を消費します。 + Resets the snapshot folder path to the default value. The actual default path will be displayed after accepting the changes and opening this dialog again. スナップショットの保存先フォルダのパスをデフォルト値に戻します。変更後、再度このダイアログを開くとデフォルトのパスが表示されます。 + Displays the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS. 仮想マシンのコメントを表示します。コメントはインストールされたゲストOSの詳細な構成に関する注釈として役立ちます。 + Lists host Floppy drives available to mount to the virtual machine. 仮想マシンにマウントするために利用可能なホスト フロッピードライブをリスト表示します。 + Invokes the Virtual Disk Manager to select a Floppy image to mount. 仮想ディスクマネージャを起動し、選択したフロッピーイメージをマウントします。 + Lists host CD/DVD drives available to mount to the virtual machine. 仮想マシンにマウントするために利用可能なホストのCD/DVDドライブをリスト表示します。 + Invokes the Virtual Disk Manager to select a CD/DVD image to mount. 仮想ディスクマネージャを起動し、選択したCD/DVDイメージをマウントします。 + <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> <qt>オーディオ出力ドライバを選択します。<b>Null Audio Driver</b>はゲストOSからオーディオカードとして認識されますが、デバイスへのすべてのアクセスは無視されます。</qt> + When checked, enables the virtual USB controller of this machine. この仮想マシンの仮想USB コントローラを有効にします。 + Adapter %1 network アダプタ %1 + Host &Interfaces ホスト インターフェース(&I) + Lists all available host interfaces. 利用可能なホスト インターフェースをリスト表示します。 + Adds a new host interface. 新規ホスト インターフェースを追加します。 + Removes the selected host interface. 選択したホスト インターフェースを除去します。 + <No suitable interfaces> <適切なインターフェースがありません> + Add 追加 + Remove 除去 + VirtualBox Host Interface %1 VirtualBox ホスト インターフェース %1 + <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> - <p>選択したホスト インターフェース<nobr><b>"%1"</b>を除去しますか?</nobr></p><p><b>注:</b> このインターフェースは複数の仮想マシンの1つ以上のネットワーク アタプタで使用中かもしれません。除去すると、他のインターフェース名を選ぶか、別の割り当て方法を正しく設定するまでそれらのアダプタは動作しません。</p> + <p>選択したホスト インターフェース<nobr><b>"%1"</b>を除去しますか?</nobr></p><p><b>注:</b> このインターフェースは複数の仮想マシンの1つ以上のネットワーク アタプタで使用中かもしれません。除去すると、他のインターフェース名を選ぶか、別の割り当て方法を正しく設定するまでそれらのアダプタは動作しません。</p> + Serial Ports シリアルポート + #serialPorts #serialPorts + Enable &VT-x/AMD-V VT-x/AMD-Vを有効化(&V) + 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. 仮想マシンはIntel VT-x/AMD-VのようなホストCPUの仮想化支援機能を使用します。チェックボックスがグレイのときはグローバル設定の指定値が使用されます。 + Other &Settings その他の設定(&S) + &Remember Media Mounted at Runtime 実行中にマウントしたメディアを記録(&R) + If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs. 仮想マシン実行中に変更したCD/DVDまたはフロッピーメディアの構成を設定ファイルに保存します。 + O&ther その他(&T) + &Enable Passthrough パススルーを有効化(&E) + 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. ホストに接続されたCD/DVDライターを使用可能にするため、ゲストOSのATAPIコマンドを直接ホスト ドライブに送ります。注:仮想マシンから音楽CDへの書き込みはサポートされていません。 + &Server Port サーバーのポート番号 + Authentication &Method 認証方法(&M) + Authentication &Timeout 認証タイムアウト値(&T) + <qt>Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value.</qt> <qt>VRDPサーバ ポート番号を表示します。ポートをデフォルト値にリセットするには<tt>0</tt>(ゼロ)を指定します。</qt> + CD/DVD image file is not selected CD/DVDイメージファイルが選択されていない + Floppy image file is not selected フロッピーイメージファイルが選択されていない + Incorrect host network interface is selected 選択したホスト ネットワーク インターフェースが不正 + Duplicate port number selected 選択したポート番号はすでに使用されている + Duplicate port path entered 指定したポート パスはすでに使用されている + %1 on the <b>%2</b> page. <b>%2</b>ページの%1。 + Port %1 serial ports ポート %1 + 00 00 + 01 01 + 02 02 + 03 03 + 04 04 + 05 05 + 08 08 + 10 10 + 09 09 + 06 06 + Parallel Ports パラレルポート + 07 07 + #parallelPorts #parallelPorts + Enable PA&E/NX PAE/NXを有効化(&E) + <qt>When checked, the Physical Address Extension @@ -9830,30 +10485,37 @@ makes the guest see an audio card, however every access to it will be ignored.&l <qt>ホストCPUの物理アドレス拡張機能(PAE)を仮想マシンで有効にします。</qt> + &IDE Controller Type IDE コントローラ タイプ(&I) + Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. 仮想IDE コントローラのタイプを定義します。この値により、VirtualBoxは異なった仮想IDEハードウェア デバイスをゲストOSに提供します。 + Audio &Controller オーディオ コントローラ(&C) + Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine. 仮想サウンドカードのタイプを選択します。 この値により、VirtualBoxは異なったオーディオ ハードウェアを仮想マシンに提供します。 + Enable USB &2.0 Controller USB 2.0 コントローラを有効化(&2) + When checked, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support. 仮想マシンの仮想USB EHCI コントローラを有効にします。USB EHCI コントローラはUSB 2.0 サポートを提供します。 + <qt>Lists all USB filters of this machine. The checkbox to the @@ -9868,14 +10530,17 @@ makes the guest see an audio card, however every access to it will be ignored.&l USBフィルタを追加または除去するにはコンテキストメニューか右側のボタンを使用してください。</qt> + Add Empty Filter 空のフィルタを追加 + &Add Empty Filter 空のフィルタを追加する(&A) + <qt>Adds a new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB @@ -9884,14 +10549,17 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>すべてのフィールドが空の新規USBフィルタを追加します。注:このフィルタはすべての接続されたUSB デバイスに適合します。</qt> + Add Filter From Device デバイスからフィルタを追加 + A&dd Filter From Device デバイスからフィルタを追加する(&D) + <qt>Adds a new USB filter with all fields set to the values of the selected USB device attached to the host PC.</qt> @@ -9899,61 +10567,74 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>選択したホストPCのUSB デバイスの値をすべてのフィールドに設定した新規USBフィルタを追加します。</qt> + Remove Filter フィルタを除去 + &Remove Filter フィルタを除去する(&R) + <qt>Removes the highlighted USB filter.</qt> <qt>ハイライト表示されたUSBフィルタを除去します。</qt> + Move Filter Up フィルタを上に移動 + &Move Filter Up フィルタを上に移動する(&M) + <qt>Moves the highlighted USB filter up.</qt> <qt>ハイライト表示されたUSBフィルタを上に移動します。</qt> + Move Filter Down フィルタを下に移動 + M&ove Filter Down フィルタを下に移動(&O) + <qt>Moves the highlighted USB filter down.</qt> <qt>ハイライト表示されたUSBフィルタを下に移動します。</qt> + Internal network name is not set 内部ネットワーク名が設定されていない + Port path not specified ポート パスが指定されていない + Port %1 parallel ports ポート %1 + USBActionGroup USBActionGroup @@ -10018,6 +10699,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ 共有フォルダ + Remote Display リモートディスプレイ @@ -10027,6 +10709,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ %1 - %2 + On the <b>%1</b> page, %2 <b>%1</b>ページの%2 @@ -10059,50 +10742,62 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsFD + Host floppy drive is not selected ホスト フロッピードライブが選択されていない + Floppy image file is not selected フロッピーイメージファイルが選択されていない + When checked, mounts the specified media to the Floppy drive of the virtual machine. 指定したメディアを仮想マシンのフロッピードライブにマウントします。 + &Mount Floppy Drive フロッピードライブのマウント(&M) + Mounts the specified host Floppy drive to the virtual Floppy drive. 指定したホスト フロッピードライブを仮想フロッピードライブにマウントします。 + Host Floppy &Drive ホスト フロッピードライブ(&D) + Lists host Floppy drives available to mount to the virtual machine. 仮想マシンにマウントするために利用可能なホスト フロッピードライブをリスト表示します。 + Mounts the specified Floppy image to the virtual Floppy drive. 指定したフロッピーイメージを仮想フロッピードライブにマウントします。 + &Image File イメージファイル(&I) + Displays the image file to mount to the virtual Floppy drive and allows to quickly select a different image. 仮想フロッピードライブにマウントされたイメージファイルを表示します。また、他のイメージを素早く選択できます。 + Invokes the Virtual Disk Manager to select a Floppy image to mount. 仮想ディスクマネージャを起動し、選択したフロッピーイメージをマウントします。 + Invokes the Virtual Media Manager to select a Floppy image to mount. 仮想メディアマネージャを起動し、選択したフロッピーイメージをマウントします。 @@ -10110,6 +10805,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsGeneral + <qt>%1&nbsp;MB</qt> <qt>%1&nbsp;MB</qt> @@ -10124,6 +10820,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ 基本(&B) + Identification 詳細 @@ -10138,38 +10835,47 @@ USBフィルタを追加または除去するにはコンテキストメニュ 仮想マシンの名前を表示します。 + OS &Type: OSタイプ(&T): + Displays the operating system type that you plan to install into this virtual machine (called a guest operating system). 仮想マシンで実行するOS(ゲストOSと呼びます)のタイプを表示します。 + Base &Memory Size メインメモリのサイズ(&M) + Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start. 仮想マシンに割り当てるメインメモリのサイズを指定します。割り当て量が多すぎると仮想マシンは起動しないかもしれません。 + < < + > > + MB MB + &Video Memory Size ビデオメモリのサイズ(&V) + Controls the amount of video memory provided to the virtual machine. 仮想マシンに割り当てるビデオメモリのサイズを指定します。 @@ -10179,66 +10885,82 @@ USBフィルタを追加または除去するにはコンテキストメニュ 高度(&A) + Boo&t Order: 起動順序(&T): + 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. 起動デバイスの優先順序を指定します。チェックボックスを使い各デバイスを有効または無効にできます。項目を上または下に移動してデバイスの順序を変更してください。 + [device] [デバイス] + Move Up (Ctrl-Up) 上に移動(Ctrl-Up) + Moves the selected boot device up. 選択した起動デバイスを上に移動します。 + Move Down (Ctrl-Down) 下に移動(Ctrl-Down) + Moves the selected boot device down. 選択した起動デバイスを下に移動します。 + Extended Features: 拡張機能: + 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! - 仮想マシンでACPI(Advanced Configuration and Power Management Interface)サポートを有効にします。<b>注:</b> Windows ゲストOSをインストールした後で本機能を無効にしないでください! + 仮想マシンでACPI(Advanced Configuration and Power Management Interface)サポートを有効にします。<b>注:</b> Windows ゲストOSをインストールした後で本機能を無効にしないでください! + Enable A&CPI ACPIを有効化(&C) + 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! - 仮想マシンでIO APIC(Input Output APIC)サポートを有効にします。これは仮想マシンの性能をわずかに低下させるかもしれません。<b>注:</b>Windows ゲストOSをインストールした後で本機能を無効にしないでください! + 仮想マシンでIO APIC(Input Output APIC)サポートを有効にします。これは仮想マシンの性能をわずかに低下させるかもしれません。<b>注:</b>Windows ゲストOSをインストールした後で本機能を無効にしないでください! + Enable IO A&PIC IO APICを有効化(&P) + 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. 仮想マシンでホストCPUの仮想化支援機能(Intel VT-xまたはAMD-V)を有効にします。 + Enable &VT-x/AMD-V VT-x/AMD-Vを有効化(&V) + When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine. 仮想マシンでホストCPUのPAE(物理アドレス拡張機能)を有効にします。 + Enable PA&E/NX PAE/NXを有効化(&E) @@ -10253,10 +10975,12 @@ USBフィルタを追加または除去するにはコンテキストメニュ ゲストOSとホストOSの間でクリップボードを共有するモードを定義します。注:本機能の利用にはゲストOSに Guest Additions のインストールが必要です。 + Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. 仮想IDE コントローラのタイプを定義します。この値により、VirtualBoxは異なった仮想IDEハードウェア デバイスをゲストOSに提供します。 + &IDE Controller Type: IDE コントローラ タイプ(&I): @@ -10276,6 +11000,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ 仮想マシンの説明を表示します。これインストールされたゲストOSの詳細な構成に関する注釈として役立ちます。 + &Other その他(&O) @@ -10285,50 +11010,62 @@ USBフィルタを追加または除去するにはコンテキストメニュ 仮想マシン実行中に変更したCD/DVDまたはフロッピーメディアの構成を設定ファイルに保存します。 + &Remember Mounted Media マウントしたメディアを記録(&R) + Runtime: 実行時: + 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. 実メモリ(<b>%1</b)の<b>75%</b>を超えるメモリが仮想マシンに割り当てられました。 ホストOSが十分なメモリを使用できません。割り当てメモリを減らしてください。 + 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. 実メモリ(<b>%1</b)の<b>50%</b>を超えるメモリが仮想マシンに割り当てられました。 ホストOSが十分なメモリを使用できません。割り当てメモリを減らしてください。 + 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. 仮想マシンをフルスクリーンまたはシームレスモードに切り換えるために必要な値(%1)より少ないビデオメモリが仮想マシンに割り当てられました。 + When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host. 仮想マシンはホストマシンの3Dグラフィックス機能を利用します。 + Enable &3D Acceleration 3Dアクセラレーションを有効化(&3) + 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. 実メモリ(<b>%2</b)の<b>%1%</b>を超えるメモリが仮想マシンに割り当てられました。 ホストOSが十分なメモリを使用できません。割り当てメモリを減らしてください。 + 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. 実メモリ(<b>%2</b)の<b>%1%</b>を超えるメモリが仮想マシンに割り当てられました。 ホストOSに十分なメモリが残されていません。自己の責任で続行してください。 + 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. 64ビット ゲストOSタイプを指定した仮想マシンは、仮想化支援機能(VT-x/AMD-V)を有効化する必要があります。そうでなければゲストOSは64ビットCPUを検出できず、起動できません。このため[OK]ボタンを押して仮想マシン設定を保存するとき、仮想化支援機能を自動的に有効化します。 + When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V. 仮想マシンでホストCPUのネステッドページング(Intel VT-xまたはAMD-V)を有効にします。 + Enable Nested Pa&ging ネステッドページングを有効化(&G) @@ -10371,54 +11108,67 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsHD + No hard disk is selected for <i>%1</i> <i>%1</i>のためのハードディスクが選択されていない + <i>%1</i> uses the hard disk that is already attached to <i>%2</i> <i>%1</i>はすでに<i>%2</i>に割り当てられている + &Add Attachment 割り当てを追加する(&A) + &Remove Attachment 割り当てを除去する(&R) + &Select Hard Disk ハードディスクを選択する(&S) + Adds a new hard disk attachment. 新規ハードディスクの割り当てを追加します。 + Removes the highlighted hard disk attachment. ハイライト表示されたハードディスクの割り当てを除去します。 + Invokes the Virtual Disk Manager to select a hard disk to attach to the currently highlighted slot. 仮想ディスクマネージャを起動し、ハードディスクを現在ハイライト表示されたスロットに割り当てます。 + 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. 仮想SATA コントローラを有効にします。注:仮想SATA コントローラが無効な場合、SATAポートにハードディスクを割り当てできません。 + &Enable SATA Controller SATA コントローラを有効化(&E) + &Attachments 割り当て(&A) + 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. この仮想マシンに割り当てられたすべてのハードディスクをリスト表示します。ハイライト表示された項目をマウスクリックするか、<tt>[スペース]</tt>キーを使用して、ドロップダウンリストから使用するハードディスクを選択してください。コンテキストメニューか右のボタンを使って、ハードディスクの割り当ての追加または除去が行えます。 + Invokes the Virtual Media Manager to select a hard disk to attach to the currently highlighted slot. 仮想メディアマネージャを起動し、ハードディスクを現在ハイライト表示されたスロットに割り当てます。 @@ -10428,22 +11178,27 @@ USBフィルタを追加または除去するにはコンテキストメニュ 実際のベースハードディスクの代わりにスロットに割り当てられた差分ハードディスクを表示します(間接的な割り当て時)。 高度なハードディスク設定が必要な場合のみ、オンにしてください。 + &Show Differencing Hard Disks 差分ハードディスクを表示(&S) + When checked, enables an additional virtual controller (either SATA or SCSI) of this machine. この仮想マシンの追加の仮想コントローラ(SATAまたはSCSI)を有効にします。 + &Enable Additional Controller 追加のコントローラを有効化(&E) + IDE &Controller Type IDE コントローラ タイプ(&C) + Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS. 仮想IDE コントローラのタイプを定義します。この値により、VirtualBoxは異なった仮想IDEハードウェア デバイスをゲストOSに提供します。 @@ -10558,7 +11313,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ ハイライト表示されたストレージ ツリーの割り当てを除去します。 - IDE Controller IDE コントローラ @@ -10574,7 +11328,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ SCSI コントローラ - Floppy Controller フロッピー コントローラ @@ -10605,7 +11358,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ この仮想マシンのすべてのストレージ コントローラと仮想イメージ、割り当てられたホスト デバイスを含みます。 - Information 情報 @@ -10616,7 +11368,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ ストレージ ツリーは異なった種類の複数のコントローラを含むことができます。この仮想マシンにはコントローラがありません。 - Attributes 属性 @@ -10715,10 +11466,12 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsNetwork + Select TAP setup application TAP設定アプリケーションを選択 + Select TAP terminate application TAP終了アプリケーションを選択 @@ -10733,6 +11486,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ ネットワーク アダプタを有効化(&E) + A&dapter Type: アダプタ タイプ(&D): @@ -10752,14 +11506,17 @@ USBフィルタを追加または除去するにはコンテキストメニュ 仮想アダプタをホストOSの実際のネットワークに割り当てる方式を指定します。 + &Network Name: ネットワーク名(&N): + Displays the name of the internal network selected for this adapter. このアダプタ用に選択した内部ネットワーク名を表示します。 + &MAC Address: MACアドレス(&M): @@ -10774,6 +11531,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ MACアドレスをランダムに生成します。 + &Generate 生成(&G) @@ -10783,84 +11541,103 @@ USBフィルタを追加または除去するにはコンテキストメニュ 仮想マシンの起動時に仮想ネットワークケーブルが接続されるかどうかを示します。 + Ca&ble Connected 接続(&B) + &Interface Name: インターフェース名(&I): + Displays the TAP interface name. TAPインターフェース名を表示します。 + &Setup Application: 設定アプリケーション(&S): + Displays the command executed to set up the TAP interface. TAPインターフェース設定時に実行するコマンドを表示します。 + Selects the setup application. 設定アプリケーションを選択します。 + &Terminate Application: 終了アプリケーション(&T): + Displays the command executed to terminate the TAP interface. TAPインターフェース終了時に実行するコマンドを表示します。 + Selects the terminate application. 終了アプリケーションを選択します。 + Host Interface Settings ホスト インターフェースの設定 + Adapter network アダプタ + Not selected adapter 未選択 + Network internal ネットワーク + Not selected network 未選択 + MAC Address MACアドレス + Not selected address 未選択 + Cable ケーブル + Connected cable 接続 + Not connected cable 未接続 @@ -10871,6 +11648,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ アダプタ タイプ(&T): + Open extended settings dialog for current attachment type. 現在の割り当てタイプのための拡張設定ダイアログを開きます。 @@ -10890,13 +11668,13 @@ USBフィルタを追加または除去するにはコンテキストメニュ ホストオンリー ネットワーク アダプタが未選択 - Not selected network adapter name 未選択 + Open additional options dialog for current attachment type. 現在の割り当てタイプのための追加オプションダイアログを開きます。 @@ -10934,90 +11712,112 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsNetworkDetails + no bridged network adapter is selected ブリッジ ネットワーク アダプタが未選択 + no internal network name is specified 内部ネットワーク名が未指定 + no host-only adapter is selected ホストオンリー アダプタが未選択 + Basic Details 詳細情報 + Bridged Network Details ブリッジ ネットワーク詳細 + Internal Network Details 内部ネットワーク詳細 + Host-only Network Details ホストオンリー ネットワーク詳細 + Not selected 未選択 + Host Settings ホスト設定 + &Bridged Network Adapter: ブリッジ ネットワーク アダプタ(&B): + Displays the name of the host network adapter selected for bridged networking. ブリッジ ネットワーク用に選択したホスト ネットワークアダプタ名を表示します。 + Internal &Network: 内部ネットワーク(&N): + Displays the name of the internal network selected for this adapter. このアダプタ用に選択した内部ネットワーク名を表示します。 + Host-only &Network Adapter: ホストオンリー ネットワークアダプタ(&N): + Displays the name of the VirtualBox network adapter selected for host-only networking. ホストオンリー ネットワーク用に選択したVirtualBox ネットワークアダプタ名を表示します。 + Guest Settings ゲスト設定 + Guest &MAC Address: ゲストMACアドレス: + 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. このアダプタのMACアドレスを表示します。MACアドレスは{0-9,A-F}から選択された12文字で構成されます。注:2番目の文字は偶数でなければなりません。 + Generates a new random MAC address. MACアドレスをランダムに生成します。 + &Cable connected ケーブル接続(&C) + Indicates whether the virtual network cable is plugged in on machine startup or not. 仮想マシンの起動時に仮想ネットワークケーブルを接続するかどうかを示します。 + Additional Options 追加オプション @@ -11025,10 +11825,12 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsNetworkPage + No host network interface is selected ホスト インターフェースが選択されていない + Internal network name is not set 内部ネットワーク名が設定されていない @@ -11067,6 +11869,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ IRQ(&I): + Displays the IRQ number of this parallel 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. このパラレルポートのIRQ番号を表示します。有効値は<tt>0</tt>から<tt>255</tt>までの範囲の整数です。<tt>15</tt>以上の値はこの仮想マシンで<b>IO APIC</b>が有効なとき使用されます。 @@ -11076,6 +11879,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ I/Oポート(&R): + 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>. このパラレルポートのベースI/Oポートアドレスを表示します。 有効値は<tt>0</tt>から<tt>0xFFFF</tt>の範囲の整数です。 @@ -11121,14 +11925,17 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsSF + &Add New Shared Folder 新規共有フォルダを追加(&A) + &Edit Selected Shared Folder 選択した共有フォルダを編集(&E) + &Remove Selected Shared Folder 選択した共有フォルダを除去(&R) @@ -11295,6 +12102,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ IRQ(&I): + 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. このシリアルポートのIRQ番号を表示します。有効値は<tt>0</tt>から<tt>255</tt>までの範囲の整数です。<tt>15</tt>以上の値はこの仮想マシンで<b>IO APIC</b>が有効なとき使用されます。 @@ -11304,6 +12112,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ I/Oポート(&R): + 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>. このシリアルポートのベースI/Oポートアドレスを表示します。 有効値は<tt>0</tt>から<tt>0xFFFF</tt>の範囲の整数です。 @@ -11328,6 +12137,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ パイプ作成(&C) + Port &Path: ポート パス(&P): @@ -11403,7 +12213,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ 2個以上のCPUが仮想マシンに割り当てられました。仮想化支援機能(VT-x/AMD-V)が無効な場合、これは動作しません。[OK]ボタンを押すと自動的に仮想化支援機能が有効化されます。 - <qt>%1&nbsp;MB</qt> <qt>%1&nbsp;MB</qt> @@ -11415,6 +12224,7 @@ USBフィルタを追加または除去するにはコンテキストメニュ <qt>%1&nbsp;CPU</qt> + <qt>%1&nbsp;CPUs</qt> %1 is 32 for now <qt>%1&nbsp;CPUs</qt> @@ -11430,7 +12240,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ メインメモリ(&M): - Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start. 仮想マシンに割り当てるメインメモリのサイズを指定します。割り当て量が多すぎると仮想マシンは起動しないかもしれません。 @@ -11471,16 +12280,17 @@ USBフィルタを追加または除去するにはコンテキストメニュ 選択した起動デバイスを上に移動します。 - Extended Features: 拡張機能: + 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! 仮想マシンでACPI(Advanced Configuration and Power Management Interface)サポートを有効にします。<b>注:</b> Windows ゲストOSをインストールした後で本機能を無効にしないでください! + Enable &ACPI ACPIを有効化(&A) @@ -11505,7 +12315,6 @@ USBフィルタを追加または除去するにはコンテキストメニュ プロセッサ数(&P): - Controls the number of virtual CPUs in the virtual machine. 仮想マシンに割り当てるCPUの数を指定します。 @@ -11800,34 +12609,42 @@ USBフィルタを追加または除去するにはコンテキストメニュ VBoxVMSettingsVRDP + 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. 仮想マシンのリモートデスクトッププロトコル(RDP)サーバー機能を有効にします。リモートクライアントが標準的なRDPクライアントを使用して実行中の仮想マシンに接続し、操作することを可能にします。 + &Enable VRDP Server VRDPサーバーを有効化(&E) + Server &Port: サーバーのポート番号(&P): + Displays the VRDP Server port number. You may specify <tt>0</tt> (zero) to reset the port to the default value. VRDPサーバーのポート番号を表示します。ポートをデフォルト値にリセットするには<tt>0</tt>(ゼロ)を指定します。 + Authentication &Method: 認証方式(&M): + Defines the VRDP authentication method. VRDPの認証方式を指定します。 + Authentication &Timeout: 認証タイムアウト値(&T): + Specifies the timeout for guest authentication, in milliseconds. ゲスト認証のタイムアウト値をミリ秒単位で指定します。 diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts index e9a4c9a17..043d7e718 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts @@ -1067,7 +1067,7 @@ verzia %1 Switch to seamless desktop integration mode - Prepnúť režim plynulého prechodu medzi plochami + Prepnúť do režimu plynulého prechodu medzi plochami Indicates whether the keyboard is captured by the guest OS (<img src=hostkey_captured_16px.png/>) or not (<img src=hostkey_16px.png/>). @@ -1733,15 +1733,15 @@ p, li { white-space: pre-wrap; } Write in legacy OVF 0.9 format for compatibility with other virtualization products. - + Uložiť v staršom formáte OVF 0.9 kvôli kompatibilite so staršími virtualizačnými produktami. &Write legacy OVF 0.9 - + &Uložiť vo formáte OVF 0.9 Please choose a filename to export the OVF to. - + Prosím, vyberte názov súboru pre export OVF. Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target. @@ -1789,7 +1789,7 @@ p, li { white-space: pre-wrap; } &Bucket: - + &Sektor: &Hostname: @@ -1941,7 +1941,7 @@ p, li { white-space: pre-wrap; } 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. - Zobrazuje kláves, ktorý sa používa ako Hostiteľský kláves v okne VM. Aktivujte pole a stlačte nový Hostiteľský kláves. Všimnite si, že alfanumerické znaky, klávesy na pohyb kurzora a na úpravu sa nedajú použiť ako Hostiteľský kláves. + Zobrazí kláves, ktorý sa používa ako Hostiteľský kláves v okne VS. Aktivujte pole a stlačte nový Hostiteľský kláves. Všimnite si, že alfanumerické znaky, klávesy na pohyb kurzora a na úpravu sa nedajú použiť ako Hostiteľské klávesy. 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. @@ -2124,15 +2124,15 @@ p, li { white-space: pre-wrap; } &Add host-only network - + &Pridať sieť medzi hostiteľom &Remove host-only network - + &Odstrániť sieť medzi hostiteľom &Edit host-only network - + &Upraviť sieť medzi hostiteľom Performing @@ -2141,11 +2141,11 @@ p, li { white-space: pre-wrap; } &Host-only Networks: - + Sie&te iba pre hostiteľa: Lists all available host-only networks. - + Zobrazí všetky dostupné siete iba pre hostiteľa. Name @@ -2156,7 +2156,7 @@ p, li { white-space: pre-wrap; } VBoxGLSettingsNetworkDetails Host-only Network Details - + Podrobnosti siete iba pre hostiteľa &Adapter @@ -2168,7 +2168,7 @@ p, li { white-space: pre-wrap; } Use manual configuration for this host-only network adapter. - + Použiť manuálnu konfiguráciu pre tento adaptér siete medzi hostiteľom. &IPv4 Address: @@ -2196,11 +2196,11 @@ p, li { white-space: pre-wrap; } IPv6 Network Mask &Length: - + Dĺžka sieťove&j masky IPv6: Displays the host IPv6 network mask prefix length for this adapter if IPv6 is supported. - + Zobrazí dĺžku prefixu IPv6 adresy hostiteľa pre tento adaptér, ak je IPv6 podporovaná. &DHCP Server @@ -2212,7 +2212,7 @@ p, li { white-space: pre-wrap; } Indicates whether the DHCP Server is enabled on machine startup or not. - + Označuje, či je povolené spustenie DHCP servera po štarte stroja alebo nie. Server Add&ress: @@ -2220,7 +2220,7 @@ p, li { white-space: pre-wrap; } Displays the address of the DHCP server servicing the network associated with this host-only adapter. - + Zobrazuje adresu DHCP servera, ktorý obsluhuje sieť medzi hostiteľom priradenú k tomuto adaptéru. Server &Mask: @@ -2228,11 +2228,11 @@ p, li { white-space: pre-wrap; } Displays the network mask of the DHCP server servicing the network associated with this host-only adapter. - + Zobrazuje sieťovú masku DHCP servera, ktorý obsluhuje sieť medzi hostiteľom priradenú k tomuto adaptéru. &Lower Address Bound: - + &Spodná hranica pre adresu: Displays the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter. @@ -2240,7 +2240,7 @@ p, li { white-space: pre-wrap; } &Upper Address Bound: - + &Horná hranica pre adresu: Displays the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter. @@ -3163,7 +3163,7 @@ p, li { white-space: pre-wrap; } Nested Paging details report - + Priamy prístup k hardware Enabled @@ -3183,7 +3183,7 @@ p, li { white-space: pre-wrap; } SCSI StorageBus - + SCSI PIIX3 @@ -3218,12 +3218,12 @@ p, li { white-space: pre-wrap; } Bridged adapter, %1 details report (network) - + Karta použítá v sieťovom moste, %1 Host-only adapter, '%1' details report (network) - + Karta pre sieť iba medzi hostiteľom a hosťom, '%1' Intel PRO/1000 MT Server (82545EM) @@ -3303,12 +3303,12 @@ p, li { white-space: pre-wrap; } Not Attached details report (Storage) - Nepripojený + Nepripojené Storage details report - + Úložisko Teleported @@ -3328,7 +3328,7 @@ p, li { white-space: pre-wrap; } Taking Live Snapshot MachineState - + Vytváram živú snímku Teleporting Paused VM @@ -3338,12 +3338,12 @@ p, li { white-space: pre-wrap; } Restoring Snapshot MachineState - + Obnovujem snímku Deleting Snapshot MachineState - + Mažem snímku Floppy @@ -3475,55 +3475,55 @@ p, li { white-space: pre-wrap; } %n year(s) - - - - + + %n rok + %n roky + %n rokov %n month(s) - - - - + + %n mesiac + %n mesiace + %n mesiacov %n day(s) - - - - + + %n deň + %n dni + %n dní %n hour(s) - - - - + + %n hodina + %n hodiny + %n hodín %n minute(s) - - - - + + %n minúta + %n minúty + %n minút %n second(s) - - - - + + %n sekunda + %n sekundy + %n sekúnd (CD/DVD) - + (CD/DVD) @@ -3952,7 +3952,7 @@ je zobrazený <b>tučným</b> písmom. Voľbou <i>Štandardný VBoxHelpButton &Help - &Pomocník + &Pomocník @@ -3974,7 +3974,7 @@ je zobrazený <b>tučným</b> písmom. Voľbou <i>Štandardný Open Virtualization Format (%1) - Formát Open Virtualization Format (%1) + Formát Open Virtualization Format (%1) Appliance Import Wizard @@ -3996,15 +3996,15 @@ p, li { white-space: pre-wrap; } < &Back - < &Späť + < &Späť &Next > - + Ď&alej > Cancel - Zrušiť + Zrušiť Appliance Import Settings @@ -4016,11 +4016,11 @@ p, li { white-space: pre-wrap; } Restore Defaults - Obnoviť východzie hodnoty + Obnoviť východzie hodnoty &Import > - + &Importovať > @@ -4035,27 +4035,27 @@ p, li { white-space: pre-wrap; } &Disagree - + &Nesúhlasím &Agree - + &Súhlasím &Print... - + &Tlačiť... &Save... - + &Uložiť... Text (*.txt) - + Text (*.txt) Save license to file... - + Uložiť licenciu do súboru... @@ -4288,17 +4288,17 @@ p, li { white-space: pre-wrap; } Attached to VMM: Virtual Disk - Pripojený k + Pripojený k Attached to VMM: CD/DVD Image - Pripojený k + Pripojený k Attached to VMM: Floppy Image - Pripojený k + Pripojený k @@ -4309,7 +4309,7 @@ p, li { white-space: pre-wrap; } Exit Full Screen or Seamless Mode - Ukončiť režim na celú obrazovku alebo bezšvový režim + Ukončiť režim na celú obrazovku alebo režim plynulého prechodu Close VM @@ -4355,7 +4355,7 @@ p, li { white-space: pre-wrap; } VBoxNetworkDialog Network Adapters - + Sieťové adaptéry @@ -4520,7 +4520,7 @@ ako veľkosť virtuálneho pevného disku.</p> <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> - <p>Vyberte typ virtuálneho pevného disku, ktorý chcete vytvoriť.</p><p><b>Dynamicky sa zväčšujúce úložisko</b> najprv zaberá veľmi málo miesta na fyzickom pevnom disku. Potom dynamicky rastie (až do definovanej veľkosti) podľa toho, koľko miesta si OS hosťa nárokuje.</p><p><b>Úložisko s fixnou veľkosťou</b> nerastie. Je uložené v súbore o približne rovnakej veľkosti ako virtuálny pevný disk. Vytvorenie úložiska s pevno veľkosťou môže trvať dlhší čas v závislosti od jeho veľkosti a výkonu vášho disku pri zápise.</p> + <p>Vyberte typ virtuálneho pevného disku, ktorý chcete vytvoriť.</p><p><b>Dynamicky sa zväčšujúce úložisko</b> najprv zaberá veľmi málo miesta na fyzickom pevnom disku. Potom dynamicky rastie (až do definovanej veľkosti) podľa toho, koľko miesta si OS hosťa nárokuje.</p><p><b>Úložisko s fixnou veľkosťou</b> nerastie. Je uložené v súbore o približne rovnakej veľkosti ako virtuálny pevný disk. Vytvorenie úložiska s pevnou veľkosťou môže trvať dlhší čas v závislosti od jeho veľkosti a výkonu vášho disku pri zápise.</p> Storage Type @@ -4536,7 +4536,7 @@ ako veľkosť virtuálneho pevného disku.</p> <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> - <p>Stlačte tlačidlo<b>Výber</b> a vyberte umiestnenie súboru, ktoré bude slúžiť na ukladanie dát pevného disku alebo napíšte jeho meno do poľa vstupu.</p> + <p>Stlačte tlačidlo <b>Výber</b> a vyberte umiestnenie súboru, ktoré bude slúžiť na ukladanie dát pevného disku alebo napíšte jeho meno do poľa vstupu.</p> &Location @@ -5187,7 +5187,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá <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> - + <p>Gratulujeme! Úspešne ste sa zaregistrovali ako užívateľ VirtualBoxu.</p><p>Ďakujeme, že ste si našli čas na vyplnenie registračného formulára!</p> <p>Failed to save the global VirtualBox settings to <b><nobr>%1</nobr></b>.</p> @@ -5217,7 +5217,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Unregister machine - + Zrušiť registráciu Discard @@ -5319,15 +5319,15 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá <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> - + <p>Zlyhalo prepnutie do režimu plynulého prechodu kvôli nedostatku video pamäte hosťa.</p><p>Mali by ste nastaviť virtuálny stroj tak, aby mal aspoň <b>%1</b> video pamäte.</p> <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> - + <p>Zlyhalo prepnutie do režimu na celú obrazovku kvôli nedostatku video pamäte hosťa.</p><p>Mali by ste nastaviť virtuálny stroj tak, aby mal aspoň <b>%1</b> video pamäte.</p><p>Kliknite na <b>Ignorovať</b>, ak chcete prepnúť do režimu na celú obrazovku aj tak alebo stlačte <b>Zrušiť</b> pre zrušenie tejto akcie.</p> You are already running the most recent version of VirtualBox. - + Používate najnovšiu verziu VirtualBoxu. <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> @@ -5531,11 +5531,11 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Close VM - Zatvoriť virtuálny stroj + Zatvoriť virtuálny stroj Continue - Pokračovať + Pokračovať Discard @@ -5543,7 +5543,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Cancel - Zrušiť + Zrušiť <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> @@ -5556,7 +5556,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Change hard disk - + Zmeniť <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> @@ -5632,7 +5632,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use. - + Používate TESTOVACIE zostavenie VirtualBoxu. Táto verzia nie je vhodná pre nasadenie v produkcii. <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> @@ -5640,7 +5640,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Restore - + Obnoviť <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> @@ -5648,11 +5648,11 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Delete - Vymazať + Vymazať Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>. - + Nepodarilo sa obnoviť snímok <b>%1</b> virtuálneho stroja <b>%2</b>. Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>. @@ -5665,12 +5665,12 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Create medium - Vy&tvoriť + Vy&tvoriť &Select medium - &Vybrať + &Vybrať <p>There are no unused media available for the newly created attachment.</p><p>Press the <b>Select</b> if you wish to open the <i>Virtual Media Manager</i>.</p> @@ -5702,7 +5702,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Force Unmount - + Vynútiť odpojenie 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. @@ -5715,7 +5715,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá E&xit warnAboutSettingsAutoConversion message box - &Ukončiť + &Ukončiť <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> @@ -5724,17 +5724,17 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá hard disk failed to mount ... - pevný disk + pevný disk CD/DVD failed to mount ... host-drive - + CD/DVD CD/DVD image failed to mount ... - obraz CD/DVD + obraz CD/DVD floppy @@ -5744,22 +5744,22 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá floppy image failed to mount ... - obraz diskety + obraz diskety hard disk failed to attach ... - pevný disk + pevný disk CD/DVD device failed to attach ... - + zariadenie CD/DVD floppy device failed to close ... - + zariadenie disketovej mechaniky <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> @@ -5768,36 +5768,36 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Remove medium - + &Odstrániť VBoxProgressDialog A few seconds remaining - + Zostáva niekoľko sekúnd Canceling... - + Stornujem... &Cancel - + &Zrušiť Cancel the current operation - + Zrušiť aktuálnu operáciu %1, %2 remaining You may wish to translate this more like "Time remaining: %1, %2" - + Zostáva %1, %2 %1 remaining You may wish to translate this more like "Time remaining: %1" - + Zostáva %1 @@ -5852,43 +5852,43 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Password: - &Heslo: + &Heslo: I &would like to create a new Sun Online account: - + Rá&d by som si vytvoril nový účet u Sun Online: &First Name: - + &Krstné meno: &Last Name: - + &Priezvisko: &Company: - + &Spoločnosť: Co&untry: - + Kr&ajina: E-&mail: - + E-&mail: P&assword: - + &Heslo: Co&nfirm Password: - + &Potvrdiť heslo: &Register - + &Registrovať sa @@ -5914,15 +5914,15 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá VBoxScreenshotViewer Screenshot of %1 (%2) - + Snímka obrazovky %1 (%2) Click to view non-scaled screenshot. - + Kliknite sem pre otvorenie nezmenšenej snímky obrazovky. Click to view scaled screenshot. - + Kliknite sem pre otvorenie snímky obrazovky zmenšenej na veľkosť obrazovky. @@ -6584,19 +6584,19 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Delete Snapshot - + &Vymazať snímku Restore the selected snapshot of the virtual machine - + Obnoviť vybranú snímku virtuálneho stroja Delete the selected snapshot of the virtual machine - + Vymazať vybranú snímku virtuálneho stroja (%1 ago) - + (pred %1) @@ -6648,8 +6648,6 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá 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. - - @@ -6840,7 +6838,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá VirtualBox Update Wizard - + Sprievodca aktualizáciou VirtualBoxu Check for Updates @@ -6864,7 +6862,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá You are already running the most recent version of VirtualBox. - + Používate najnovšiu verziu VirtualBoxu. <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> @@ -6957,7 +6955,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá <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> - <p>Ak sú vyššie uvedené údaje správne, stlačte tlačidlo <b>Dokončiť</b>. Keď ho stlačíte, vybrané médium bude dočasne pripojené k virtuálnemu stroju a stroj bude spustený.</p><p>Majte na pamäti, že pri ukončení virtuálneho stroja bude špecifikované médium automaticky odpojené a bootovateľné zariadenie bude znovu nastavené na prvý pevný disk.</p><p>V závislosti na type inštalačného programu možno budete chcieť manuálne odpojiť (vybrať) médium predtým, ako inštalácia reštartuje virtuálny stroj, aby ste tak zabránili opätovnému spusteniu inštalácia. Môžete tak učiniť výberom zodpovedajúcej akcie <b>Odpojiť...</b> z ponuky <b>Zariadenia</p>. + <p>Ak sú vyššie uvedené údaje správne, stlačte tlačidlo <b>Dokončiť</b>. Keď ho stlačíte, vybrané médium bude dočasne pripojené k virtuálnemu stroju a stroj bude spustený.</p><p>Majte na pamäti, že pri ukončení virtuálneho stroja bude špecifikované médium automaticky odpojené a bootovateľné zariadenie bude znovu nastavené na prvý pevný disk.</p><p>V závislosti na type inštalačného programu budete možno musieť manuálne odpojiť (vybrať) médium predtým, ako inštalácia reštartuje virtuálny stroj, aby ste tak zabránili opätovnému spusteniu inštalácie. Môžete tak učiniť výberom zodpovedajúcej akcie <b>Odpojiť...</b> z ponuky <b>Zariadenia</b>.</p> Summary @@ -7143,7 +7141,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Nested Paging - + Priamy prístup k hardware VBoxVMInformationDlg @@ -7152,19 +7150,19 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Not Available details report (VRDP server port) - + Nedostupný Storage Statistics - + Štatistiky o úložiskách No Storage Devices - + Bez zariadení pre úložiská Network Statistics - + Sieťové štatistiky @@ -7193,12 +7191,12 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá <nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr> VM tooltip (name, last state change, session state) - <nobr>%1<br></nobr><nobr>%2 od %3</nobr><br><nobr>Relácia %4</nobr> + <nobr>%1<br></nobr><nobr>%2 od %3</nobr><br><nobr>Relácia %4</nobr> <nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr> Inaccessible VM tooltip (name, last state change) - <nobr><b>%1</b><br></nobr><nobr>Nedostupné od %2</nobr> + <nobr><b>%1</b><br></nobr><nobr>Nedostupné od %2</nobr> S&how @@ -7206,31 +7204,31 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Switch to the window of the selected virtual machine - Prepnúť do okna vybraného virtuálneho stroja + Prepnúť do okna vybraného virtuálneho stroja S&tart - S&pustiť + S&pustiť Start the selected virtual machine - Spustiť vybraný virtuálny stroj + Spustiť vybraný virtuálny stroj R&esume - P&okračovať + P&okračovať Resume the execution of the virtual machine - + Pokračovať v spúšťaní virtuálneho stroja &Pause - &Pozastaviť + &Pozastaviť Suspend the execution of the virtual machine - + Pozastaví spúšťanie virtuálneho stroja @@ -7511,87 +7509,87 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá VBoxVMSettingsDisplay 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. - + priradili ste menej ako <b>%1</b> video pamäte, čo je minimálne potrebné množstvo na prepnutie virtuálneho stroja do režimu na celú obrazovku alebo do režimu plynulého prechodu. <qt>%1&nbsp;MB</qt> - <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;MB</qt> &Video - + &Video Video &Memory: - + V&ideo pamäť: Controls the amount of video memory provided to the virtual machine. - Ovláda množstvo videopamäte poskytnutej virtuálnemu stroju. + Ovláda množstvo videopamäte poskytnutej virtuálnemu stroju. MB - MB + MB Extended Features: - Rozšírené vlastnosti: + Rozšírené vlastnosti: When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host. - + Ak je zaškrtnuté, virtuálny stroj dostane prístup k 3D grafickým funkciám hostiteľa. Enable &3D Acceleration - + Povoliť &3D akceleráciu &Remote Display - + &Vzdialený displej 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. - + Keď je zaškrtnuté, virtuálny stroj bude slúžiť ako Server vzdialenej plochy (RDP) umožňujúc vzdialeným klientom pripojiť sa a pracovať na virtuálnom stroji (ak je spustený) s použitím štandardného klienta RDP. &Enable Server - &Zapnúť server + &Zapnúť server Server &Port: - + &Port servera: Authentication &Method: - + A&utentizačná metóda: Defines the VRDP authentication method. - Určuje autentifikačnú metódu VRDP. + Určuje autentizačnú metódu VRDP. Authentication &Timeout: - + Ča&s na odpoveď pri autentizácii: Specifies the timeout for guest authentication, in milliseconds. - Uvádza expiračnú dobu autentifikácie hosťa, v milisekundách. + Uvádza expiračnú dobu autentizácie hosťa, v milisekundách. you have assigned less than <b>%1</b> of video memory which is the minimum amount required for HD Video to be played efficiently. - + priradili ste menej ako <b>%1</b> video pamäte, čo je minimálne potrebné množstvo na efektívne prehrávanie HD videa. When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host. - + Ak je zaškrtnuté, virtuálny stroj dostane prístup k funkciám video akcelerácie na hostiteľskom počítači. Enable &2D Video Acceleration - + Povoliť &2D akceleráciu videa The VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP. - + Číslo portu VRDP servera. Môžete zadať <tt>0</tt> (nula), čím vyberiete port 3389, štandardný port pre RDP. @@ -8299,51 +8297,51 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá General - Všeobecné + Všeobecné Storage - + Úložisko Hard Disks - Pevné disky + Pevné disky CD/DVD-ROM - CD/DVD-ROM + CD/DVD-ROM Floppy - Disketa + Disketa Audio - Audio + Audio Network - Sieť + Sieť Ports - + Porty Serial Ports - Sériové porty + Sériové porty Parallel Ports - Paralelné porty + Paralelné porty USB - USB + USB Shared Folders - Zdieľané priečinky + Zdieľané priečinky Remote Display @@ -8351,15 +8349,15 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá %1 - %2 - + %1 - %2 System - Systém + Systém Display - Displej + Displej 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. @@ -8371,7 +8369,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá you have 2D Video Acceleration enabled. As 2D Video Acceleration is supported for Windows guests only, this feature will be disabled. - + povolili ste 2D akceleráciu videa. Pretože 2D akcelerácia videa je podporovaná iba pre hosťovské systémy s Windows, táto vlastnosť bude vypnutá. @@ -8413,19 +8411,19 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Displays the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of disk space. - Určuje cestu, kam budú ukladané snímky virtuálneho stroja. Všimnite si, že snímky môžu zaberať veľkú časť diskového priestoru. + Určuje cestu, kam budú ukladané snímky tohto virtuálneho stroja. Uvedomte si, že snímky môžu zaberať veľkú časť miesta na disku. &Basic - &Základné + &Základné &Name: - &Názov: + &Názov: Displays the name of the virtual machine. - Žobrazí názov virtuálneho stroja. + Zobrazí názov virtuálneho stroja. Displays the operating system type that you plan to install into this virtual machine (called a guest operating system). @@ -8461,7 +8459,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Advanced - &Rozšírené + &Rozšírené 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. @@ -8505,7 +8503,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá 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. - Určuje režim zdieľania schránky medzi hosťovským a hostiteľským OS. Všimnite si, že táto vlastnosť vyžaduje inštaláciu Hosťovských doplnkov v operačnom systéme hosťovského stroja. + Určuje, ktoré dáta v schránke budú zdieľané medzi hosťovským a hostiteľským OS. Táto vlastnosť vyžaduje inštaláciu Hosťovských doplnkov v operačnom systéme hosťovského stroja. S&napshot Folder: @@ -8537,11 +8535,11 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá If checked, show the Mini ToolBar in Fullscreen and Seamless modes. - + Ak je zaškrtnuté, zobrazí v režime na celú obrazovku a v režime plynulého prechodu malú lištu nástrojov. Show In &Fullscreen/Seamless - + Zobraziť v rež&ime celej obrazovky/plynulého prechodu If checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen. @@ -8549,7 +8547,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Show At &Top Of Screen - + Z&obraziť na vrchu obrazovky @@ -8576,7 +8574,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá <nobr>Expand/Collapse&nbsp;Item</nobr> - + <nobr>Rozbaliť/zabaliť&nbsp;položku</nobr> <nobr>Add&nbsp;Hard&nbsp;Disk</nobr> @@ -8600,103 +8598,103 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Add Controller - + Pridať radič Add IDE Controller - + Pridať radič IDE Add SATA Controller - + Pridať radič SATA Add SCSI Controller - + Pridať radič SCSI Add Floppy Controller - + Pridať radič disketovej mechaniky Remove Controller - + Odstrániť radič Add Attachment - + Pridať potomka Add Hard Disk - + Pridať pevný disk Add CD/DVD Device - + Pridať zariadenie CD/DVD Add Floppy Device - + Pridať zariadenie disketovej mechaniky Remove Attachment - + Odstrániť potomka Adds a new controller to the end of the Storage Tree. - + Pridá nový radič na koniec stromu s úložiskami. Removes the controller highlighted in the Storage Tree. - + Odstrániť vybraný radič zo stromu s úložiskami. Adds a new attachment to the Storage Tree using currently selected controller as parent. - + Pridá nového potomka do stromu s úložiskami, kde vybraný radič bude mať úlohu rodiča. Removes the attachment highlighted in the Storage Tree. - + Odstráni potomka označeného v strome úložisk. IDE Controller - + Radič IDE SATA Controller - + Radič SATA SCSI Controller - + Radič SCSI Floppy Controller - + Radič disketovej mechaniky Hard &Disk: - + Pe&vný disk: &CD/DVD Device: - + &Zariadenie CD/DVD: &Floppy Device: - + Z&ariadenie disketovej mechaniky: &Storage Tree - + &Strom úložísk Contains all storage controllers for this machine and the virtual images and host drives attached to them. - + Obsahuje všetky diskové radiče na tomto stroji, virtuálne obrazy a zariadenia hostiteľa k nim pripojené. Information - + Informácie The Storage Tree can contain several controllers of different types. This machine currently has no controllers. @@ -8704,11 +8702,11 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Attributes - + Atribúty &Name: - &Názov: + &Názov: Changes the name of the storage controller currently selected in the Storage Tree. @@ -8716,7 +8714,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Type: - + &Typ: Selects the sub-type of the storage controller currently selected in the Storage Tree. @@ -8724,7 +8722,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá S&lot: - + S&lot: 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. @@ -8756,27 +8754,27 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá Virtual Size: - + Virtuálna veľkosť Actual Size: - + Skutočná veľkosť Size: - + Veľkosť: Location: - + Umiestnenie: Type (Format): - + Typ (formát): Attached To: - + Pripojený k: @@ -8795,7 +8793,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Enable Network Adapter - &Povoliť sieťový adaptér + &Povoliť sieťový adaptér Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine. @@ -8803,7 +8801,7 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá &Attached to: - + P&ripojený k: Controls how this virtual adapter is attached to the real network of the Host OS. @@ -8987,82 +8985,82 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá VBoxVMSettingsParallelPage Duplicate port number selected - Je vybrané duplikované číslo portu + Je vybrané duplikované číslo portu Port path not specified - Cesta k portu nie je definovaná. + Cesta k portu nie je definovaná Duplicate port path entered - Je zadaná duplikovaná cesta k portu + Je zadaná duplikovaná cesta k portu VBoxVMSettingsSF Adds a new shared folder definition. - Pridá definíciu nového zdieľaného priečinka. + Pridá definíciu nového zdieľaného priečinka. Edits the selected shared folder definition. - Upraví definíciu vybraného zdieľaného priečinka. + Upraví definíciu vybraného zdieľaného priečinka. Removes the selected shared folder definition. - Odstráni definíciu vybraného virtuálneho priečinka. + Odstráni definíciu vybraného virtuálneho priečinka. Machine Folders - Priečinky stroja + Priečinky stroja Transient Folders - Dočasné priečinky + Dočasné priečinky Full - Plný + Plný Read-only - Iba na čítanie + Iba na čítanie 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. - + Zobrazí všetky zdieľané priečinky dostupné pre tento počítať. Použite 'net use x: \\vboxsrv\share' pre prístup k zdieľanému priečinku s názvom <i>share</i> pre operačný systém na báze DOSu alebo 'mount -t vboxsf share mount_point' pre prístup k priečinku z operačného systému Linux. Táto vlastnosť vyžaduje inštaláciu Hosťovských doplnkov. Name - Názov + Názov Path - Cesta + Cesta Access - Prístup + Prístup Global Folders - + Globálne priečinky &Add Shared Folder - + &Pridať zdieľaný priečinok &Edit Shared Folder - + &Upraviť zdieľaný priečinok &Remove Shared Folder - + O&dstrániť zdieľaný priečinok &Folders List - + &Zoznamy priečinkov @@ -9172,15 +9170,15 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá VBoxVMSettingsSerialPage Duplicate port number selected - Je vybrané duplikované číslo portu + Je vybrané duplikované číslo portu Port path not specified - Cesta k portu nie je definovaná. + Cesta k portu nie je definovaná Duplicate port path entered - Je zadaná duplikovaná cesta k portu + Je zadaná duplikovaná cesta k portu @@ -9211,12 +9209,12 @@ preskočiť a pripojiť pevné disky neskôr pomocou dialógu Nastavenia virtuá <qt>%1&nbsp;MB</qt> - <qt>%1&nbsp;MB</qt> + <qt>%1&nbsp;MB</qt> <qt>%1&nbsp;CPU</qt> %1 is 1 for now - + <qt>%1&nbsp;CPU</qt> &Motherboard diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts index 7ef2e640c..4260a2d5c 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts @@ -1,6 +1,6 @@ - - + + @@@ @@ -612,7 +612,7 @@ &Restore current snapshot '%1' - + Врати актуелну слику '%1' @@ -1185,7 +1185,7 @@ p, li { white-space: pre-wrap; } Appliance Export Settings - + Параметри извоза састава 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. @@ -1390,15 +1390,15 @@ p, li { white-space: pre-wrap; } When checked, the Dock Icon will reflect the VM window content in realtime. - + Када унето, Dock икона показује садржај ВМ. &Dock Icon Realtime Preview - + Dock икона реални преглед &Auto show Dock && Menubar in fullscreen - + Ауто покажи Dock траку у пуном-екрану @@ -2716,7 +2716,7 @@ p, li { white-space: pre-wrap; } Guru Meditation MachineState - + Teleporting @@ -2791,7 +2791,7 @@ p, li { white-space: pre-wrap; } Paravirtualized Network (virtio-net) NetworkAdapterType - + Paravirtualized мрежа (virtio-net) I82078 @@ -2873,55 +2873,55 @@ p, li { white-space: pre-wrap; } %n year(s) - - - - + + %n годиа + %n године + %n година %n month(s) - - - - + + %n месец + %n месеца + %n месеца %n day(s) - - - - + + %n дан + %n дана + %n дана %n hour(s) - - - - + + %n сат + %n сата + %n сата %n minute(s) - - - - + + %n минут + %n минута + %n минута %n second(s) - - - - + + %n секунд + %n секунда + %n секунда (CD/DVD) - + (CD/DVD) @@ -2954,7 +2954,7 @@ p, li { white-space: pre-wrap; } Reading Appliance ... - + Читање средства... @@ -3022,7 +3022,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;">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> - + <!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;">Асистент вам помаже у увозу средства. </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> за предходни лист.</p><p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">VirtualBox актуелно подржава увоз средства из Open Virtualization Format (OVF). За наставак, одабрати датотеку за увоз:</p></body></html> @@ -4343,31 +4343,31 @@ p, li { white-space: pre-wrap; } Failed to open appliance. - + Погрешно отварање средства. Failed to open/interpret appliance <b>%1</b>. - + Погрешно отварање/интерпретирање средства <b>%1</b>. Failed to import appliance <b>%1</b>. - + Погрешан увоз средства <b>%1</b>. Failed to create appliance. - + Погрешна креација средства. Failed to prepare the export of the appliance <b>%1</b>. - + Погрешно спремање извоза средства <b>%1</b>. Failed to create an appliance. - + Неуспешна креација средства. Failed to export appliance <b>%1</b>. - + Погрешан извоз средства <b>%1</b>. <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> @@ -4399,7 +4399,7 @@ p, li { white-space: pre-wrap; } 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. - + Делује да имате USBFS систем монтиран на /sys/bus/usb/drivers. Строго препоручујемо да то промените, пошто је то погрешно подешавање система што може да доводи до грешке USB уређаја. You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use. @@ -4534,12 +4534,12 @@ p, li { white-space: pre-wrap; } <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> - + <p>Сигурн избрисати CD/DVD-ROM уређај?</p><p>Нећете моћи да монтирате CD или ISO слике или д аинсталирате Додатак!</p> &Remove medium - + Уклони @@ -4619,12 +4619,12 @@ p, li { white-space: pre-wrap; } %1, %2 remaining You may wish to translate this more like "Time remaining: %1, %2" - + Остало: %1, %2 %1 remaining You may wish to translate this more like "Time remaining: %1" - + Остало: %1 @@ -4922,7 +4922,7 @@ p, li { white-space: pre-wrap; } Export one or more VirtualBox virtual machines as an appliance - + Извоз једне или више ВМ као средство Re&fresh @@ -5123,7 +5123,7 @@ p, li { white-space: pre-wrap; } (%1 ago) - + (пре %1) @@ -5153,10 +5153,10 @@ p, li { white-space: pre-wrap; } 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. - - - - + + Пажња: Узимате слику машине која ради и која има %n непроменљиву слику прикачену. Све док радите са овом сликом непроменљива слика неће бити рисетована због спречавања губљења података. + Пажња: Узимате слику машине која ради и која има %n непроменљиве слике прикачене. Све док радите са овом сликом непроменљиве слике неће бити рисетоване због спречавања губљења података. + Пажња: Узимате слику машине која ради и која има %n непроменљиве слике прикачене. Све док радите са овом сликом непроменљиве слике неће бити рисетоване због спречавања губљења података. @@ -6644,7 +6644,7 @@ p, li { white-space: pre-wrap; } &Cable connected - Привезан каблом + Привезан каблом @@ -6951,7 +6951,7 @@ p, li { white-space: pre-wrap; } 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>. - + Показује базну I/O адресу серијалног порта. Вредности су бројеви између <tt>0</tt> и <tt>0xFFFF</tt>. diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_ca_VA.ts b/src/VBox/Frontends/VirtualBox/nls/qt_ca_VA.ts new file mode 100644 index 000000000..578f32a89 --- /dev/null +++ b/src/VBox/Frontends/VirtualBox/nls/qt_ca_VA.ts @@ -0,0 +1,5298 @@ + + + + + AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>El dispositiu de reproducció de so <b>%1</b> no funciona.<br/>S'està tornant a <b>%2</b>.</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>S'està canviat al dispositiu de reproducció <b>%1</b><br/>que és disponible i té una preferència major.</html> + + + Revert back to device '%1' + Torna al dispositiu '%1' + + + + Phonon:: + + Notifications + Notificacions + + + Music + Música + + + Video + Vídeo + + + Communication + Comunicació + + + Games + Jocs + + + Accessibility + Accessibilitat + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + Avís: Pareix que no teniu instal·lat el paquet gstreamer0.10-plugins-good. + S'han deshabilitat algunes característiques de vídeo. + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + Avís: Pareix que no teniu instal·lat els connectors bàsics de GStreamer. + S'ha deshabilitat el suport per a vídeo i àudio + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your Gstreamer installation and make sure you +have libgstreamer-plugins-base installed. + No es pot iniciar la reproducció + +Comproveu la instal·lació de GStreamer i assegureu-vos +que teniu instal·lat el connector libgstreamer-plugins-base. + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + + No es troba un còdec requerit. Necessiteu instal·lar el còdec següent per reproduir este contingut: %0 + No es troba un còdec requerit. Necessiteu instal·lar els còdecs següents per reproduir este contingut: %0 + No es troba un còdec requerit. Necessiteu instal·lar els còdecs següents per reproduir este contingut: %0 + + + + Could not open media source. + No es pot obrir el suport multimèdia. + + + Invalid source type. + Tipus de font no vàlida. + + + Could not locate media source. + No es pot trobar el suport multimèdia. + + + Could not open audio device. The device is already in use. + No es pot obrir el dispositiu d'àudio. El dispositiu ja es troba en ús. + + + Could not decode media source. + No es pot decodificar el suport multimèdia. + + + + Phonon::VolumeSlider + + Volume: %1% + Volum: %1% + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + Feu servir el següent desplaçador per a ajustar el volum. El límit esquerre serà un 0% i el límit dret serà %1% + + + + Q3Accel + + %1, %2 not defined + %1, %2 no definit + + + Ambiguous %1 not handled + %1 ambigu no gestionat + + + + Q3DataTable + + True + Vertader + + + False + Fals + + + Insert + Insereix + + + Update + Actualitza + + + Delete + Suprimeix + + + + Q3FileDialog + + Copy or Move a File + Copia o mou un fitxer + + + Read: %1 + Llig: %1 + + + Write: %1 + Escriu: %1 + + + Cancel + Cancel·la + + + All Files (*) + Tots els fitxers (*) + + + Name + Nom + + + Size + Mida + + + Type + Tipus + + + Date + Data + + + Attributes + Atributs + + + &OK + &D'acord + + + Look &in: + C&erca a: + + + File &name: + &Nom de fitxer: + + + File &type: + &Tipus de fitxer: + + + Back + Arrere + + + One directory up + Directori superior + + + Create New Folder + Crea nova carpeta + + + List View + Visualitza com a llista + + + Detail View + Vista detallada + + + Preview File Info + Mostra informació del fitxer + + + Preview File Contents + Mostra continguts del fitxer + + + Read-write + Lectura-escriptura + + + Read-only + Només-lectura + + + Write-only + Només-escriptura + + + Inaccessible + Inaccessible + + + Symlink to File + Enllaç simbòlic a fitxer + + + Symlink to Directory + Enllaç simbòlic a directori + + + Symlink to Special + Enllaç simbòlic a especial + + + File + Fitxer + + + Dir + Dir + + + Special + Especial + + + Open + Obri + + + Save As + Anomena i alça + + + &Open + &Obri + + + &Save + &Alça + + + &Rename + &Canvia el nom + + + &Delete + &Suprimeix + + + R&eload + To&rna a carregar + + + Sort by &Name + Ordena per &nom + + + Sort by &Size + Ordena per &mida + + + Sort by &Date + Ordena per &data + + + &Unsorted + &Sense orde + + + Sort + Ordena + + + Show &hidden files + Mostra els fitxers &ocults + + + the file + el fitxer + + + the directory + el directori + + + the symlink + l'enllaç simbòlic + + + Delete %1 + Suprimeix %1 + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>Esteu segur que voleu esborrar %1 "%2"?</qt> + + + &Yes + &Sí + + + &No + &No + + + New Folder 1 + Nova carpeta 1 + + + New Folder + Nova carpeta + + + New Folder %1 + Nova carpeta %1 + + + Find Directory + Cerca directori + + + Directories + Directoris + + + Directory: + Directori: + + + Error + Error + + + %1 +File not found. +Check path and filename. + %1 +No s'ha trobat el fitxer. +Comproveu la ruta i el nom del fitxer. + + + + Q3LocalFs + + Could not read directory +%1 + No es pot llegir el directori +%1 + + + Could not create directory +%1 + No es pot crear el directori +%1 + + + Could not remove file or directory +%1 + No es pot eliminar el fitxer o el directori +%1 + + + Could not rename +%1 +to +%2 + No es pot canviar el nom +%1 +a +%2 + + + Could not open +%1 + No es pot obrir +%1 + + + Could not write +%1 + No es pot escriure +%1 + + + + Q3MainWindow + + Line up + Alinea + + + Customize... + Personalitza... + + + + Q3NetworkProtocol + + Operation stopped by the user + Operació aturada per l'usuari + + + + Q3ProgressDialog + + Cancel + Cancel·la + + + + Q3TabDialog + + OK + D'acord + + + Apply + Aplica + + + Help + Ajuda + + + Defaults + Per defecte + + + Cancel + Cancel·la + + + + Q3TextEdit + + &Undo + &Desfés + + + &Redo + &Refés + + + Cu&t + Re&talla + + + &Copy + &Copia + + + &Paste + Engan&xa + + + Clear + Neteja + + + Select All + Selecciona-ho tot + + + + Q3TitleBar + + System + Sistema + + + Restore up + Restaura a sobre + + + Minimize + Minimitza + + + Restore down + Restaura a sota + + + Maximize + Maximitza + + + Close + Tanca + + + Contains commands to manipulate the window + Conté ordes per a manipular la finestra + + + Puts a minimized back to normal + Restaura una finestra minimitzada a l'estat normal + + + Moves the window out of the way + Mou la finestra fora de l'espai visible + + + Puts a maximized window back to normal + Restaura una finestra maximitzada a l'estat normal + + + Makes the window full screen + Fa que la finestra ocupi tota la pantalla + + + Closes the window + Tanca la finestra + + + Displays the name of the window and contains controls to manipulate it + Mostra el nom de la finestra i conté controls per a manipular-la + + + + Q3ToolBar + + More... + Més... + + + + Q3UrlOperator + + The protocol `%1' is not supported + El protocol `%1' no està suportat + + + The protocol `%1' does not support listing directories + El protocol `%1' no admet llistat de directoris + + + The protocol `%1' does not support creating new directories + El protocol `%1' no admet la creació de nous directoris + + + The protocol `%1' does not support removing files or directories + El protocol `%1' no admet l'eliminació de fitxers o directoris + + + The protocol `%1' does not support renaming files or directories + El protocol `%1' no admet el canvi de nom de fitxers o directoris + + + The protocol `%1' does not support getting files + El protocol `%1' no admet l'obtenció de fitxers + + + The protocol `%1' does not support putting files + El protocol `%1' no admet afegir-hi fitxers + + + The protocol `%1' does not support copying or moving files or directories + El protocol `%1' no admet la còpia o desplaçament de fitxers o directoris + + + (unknown) + (desconegut) + + + + Q3Wizard + + &Cancel + &Cancel·la + + + < &Back + < &Arrere + + + &Next > + Següe&nt > + + + &Finish + &Finalitza + + + &Help + A&juda + + + + QAbstractSocket + + Host not found + No s'ha trobat l'amfitrió + + + Connection refused + S'ha rebutjat la connexió + + + Socket operation timed out + S'ha excedit el temps d'espera en l'operació del sòcol + + + Socket is not connected + No s'ha connectat el sòcol + + + + QAbstractSpinBox + + &Step up + Pa&s amunt + + + Step &down + Pas a&vall + + + &Select All + &Selecciona-ho tot + + + + QApplication + + Activate + Activa + + + Executable '%1' requires Qt %2, found Qt %3. + L'executable '%1' requereix Qt %2, però s'ha trobat Qt %3. + + + Incompatible Qt Library Error + Error de biblioteca Qt incompatible + + + QT_LAYOUT_DIRECTION + Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. + LTR + + + Activates the program's main window + Activa la finestra principal del programa + + + + QCheckBox + + Uncheck + Desactiva + + + Check + Activa + + + Toggle + Commuta + + + + QColorDialog + + Hu&e: + &Matís: + + + &Sat: + &Sat: + + + &Val: + &Val: + + + &Red: + Ve&rmell: + + + &Green: + Ver&d: + + + Bl&ue: + Bla&u: + + + A&lpha channel: + Canal a&lfa: + + + &Basic colors + Colors &bàsics + + + &Custom colors + &Colors personalitzats + + + &Add to Custom Colors + &Afig als colors personalitzats + + + Select color + Selecciona el color + + + + QComboBox + + Open + Obri + + + False + Fals + + + True + Vertader + + + Close + Tanca + + + + QCoreApplication + + %1: permission denied + QSystemSemaphore + %1: permís denegat + + + %1: already exists + QSystemSemaphore + %1: ja existeix + + + %1: doesn't exists + QSystemSemaphore + %1: no existeix + + + %1: out of resources + QSystemSemaphore + %1: s'han sobrepassat els recursos + + + %1: unknown error %2 + QSystemSemaphore + %1: error desconegut %2 + + + %1: key is empty + QSystemSemaphore + %1: la clau és buida + + + %1: unable to make key + QSystemSemaphore + %1: no es pot crear la clau + + + %1: ftok failed + QSystemSemaphore + %1: ha fallat ftok + + + + QDB2Driver + + Unable to connect + No es pot connectar + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback transaction + No es pot fer arrere la transacció + + + Unable to set autocommit + No es pot activar l'autovalidació + + + + QDB2Result + + Unable to execute statement + No es pot executar la declaració + + + Unable to prepare statement + No es pot preparar la declaració + + + Unable to bind variable + No es pot vincular la variable + + + Unable to fetch record %1 + No es pot recollir el registre %1 + + + Unable to fetch next + No es pot recollir el següent + + + Unable to fetch first + No es pot recollir el primer + + + + QDateTimeEdit + + AM + AM + + + am + am + + + PM + PM + + + pm + pm + + + + QDial + + QDial + QDial + + + SpeedoMeter + Taquímetre + + + SliderHandle + Grapat + + + + QDialog + + What's This? + Què és això? + + + Done + Fet + + + + QDialogButtonBox + + OK + D'acord + + + Save + Alça + + + Open + Obri + + + Cancel + Cancel·la + + + Close + Tanca + + + Apply + Aplica + + + Reset + Reinicia + + + Help + Ajuda + + + Don't Save + No ho alces + + + Discard + Descarta + + + &Yes + &Sí + + + Yes to &All + Si a &tot + + + &No + &No + + + N&o to All + N&o a tot + + + Save All + Alça-ho tot + + + Abort + Interromp + + + Retry + Torna a provar + + + Ignore + Ignora + + + Restore Defaults + Restaura els valors predeterminats + + + Close without Saving + Tanca sense alçar + + + &OK + &D'acord + + + + QDirModel + + Name + Nom + + + Size + Mida + + + Kind + Match OS X Finder + Tipus + + + Type + All other platforms + Tipus + + + Date Modified + Data modificada + + + + QDockWidget + + Close + Tanca + + + Dock + Acoblador + + + Float + Float + + + + QDoubleSpinBox + + More + Més + + + Less + Menys + + + + QErrorMessage + + Debug Message: + Missatge de depuració: + + + Warning: + Avís: + + + Fatal Error: + Error fatal: + + + &Show this message again + &Mostra este missatge novament + + + &OK + &D'acord + + + + QFileDialog + + All Files (*) + Tots els fitxers (*) + + + Directories + Directoris + + + &Open + &Obri + + + &Save + &Alça + + + Open + Obri + + + %1 already exists. +Do you want to replace it? + %1 ja existeix.Voleu reemplaçar-lo? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +No s'ha trobat el fitxer. +Comproveu que el nom del fitxer es correcte. + + + My Computer + El meu ordinador + + + &Rename + &Canvia el nom + + + &Delete + &Suprimeix + + + Show &hidden files + Mostra fitxers &ocults + + + Back + Arrere + + + Parent Directory + Directori pare + + + List View + Visualitza com a llista + + + Detail View + Vista detallada + + + Files of type: + Fitxers del tipus: + + + Directory: + Directori: + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +No s'ha trobat el directori. +Comproveu que el nom del directori es correcte. + + + '%1' is write protected. +Do you want to delete it anyway? + '%1' està protegit contra escriptura.Voleu suprimir-lo igualment? + + + Are sure you want to delete '%1'? + Esteu segur que voleu suprimir '%1'? + + + Could not delete directory. + No s'ha pogut suprimir el directori. + + + Save As + Anomena i alça + + + Drive + Unitat + + + File + Fitxer + + + Unknown + Desconegut + + + Find Directory + Cerca directori + + + Show + Mostra + + + Forward + Avant + + + New Folder + Nova carpeta + + + &New Folder + &Nova carpeta + + + &Choose + &Tria + + + Remove + Elimina + + + File &name: + &Nom de fitxer: + + + Look in: + Cerca a: + + + Create New Folder + Crea nova carpeta + + + + QFileSystemModel + + Invalid filename + Nom de fitxer no vàlid + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>No es pot usar el nom "%1".</b><p>Proveu d'usar un altre nom, amb menys caràcters o sense signes de puntuació. + + + Name + Nom + + + Size + Mida + + + Kind + Match OS X Finder + Tipus + + + Type + All other platforms + Tipus + + + Date Modified + Data de modificació + + + My Computer + El meu ordinador + + + Computer + Ordinador + + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1 KB + + + %1 bytes + %1 bytes + + + + QFontDatabase + + Normal + Normal + + + Bold + Negreta + + + Demi Bold + Semi-negreta + + + Black + Negre + + + Demi + Semi + + + Light + Lleuger + + + Italic + Cursiva + + + Oblique + Oblícua + + + Any + Qualsevol + + + Latin + Llatí + + + Greek + Grec + + + Cyrillic + Cirílic + + + Armenian + Armeni + + + Hebrew + Hebreu + + + Arabic + Àrab + + + Syriac + Siri + + + Thaana + Thaana + + + Devanagari + Devanagari + + + Bengali + Bengali + + + Gurmukhi + Gurmukhi + + + Gujarati + Gujarati + + + Oriya + Oriya + + + Tamil + Tamil + + + Telugu + Telugu + + + Kannada + Kannada + + + Malayalam + Malayalam + + + Sinhala + Sinhala + + + Thai + Thai + + + Lao + Lao + + + Tibetan + Tibetà + + + Myanmar + Myanmar + + + Georgian + Georgià + + + Khmer + Khmer + + + Simplified Chinese + Xinés simplificat + + + Traditional Chinese + Xinés tradicional + + + Japanese + Japonés + + + Korean + Coreà + + + Vietnamese + Vietnamita + + + Symbol + Símbol + + + Ogham + Ogham + + + Runic + Rúnic + + + + QFontDialog + + &Font + &Tipus de lletra + + + Font st&yle + &Estil de lletra + + + &Size + &Mida + + + Effects + Efectes + + + Stri&keout + &Ratllat + + + &Underline + &Subratllat + + + Sample + Mostra + + + Wr&iting System + S&istema d'escriptura + + + Select Font + Seleccioneu el tipus de lletra + + + + QFtp + + Not connected + No està connectat + + + Host %1 not found + No s'ha trobat l'amfitrió %1 + + + Connection refused to host %1 + S'ha rebutjat la connexió a l'amfitrió %1 + + + Connected to host %1 + Connectat a l'amfitrió %1 + + + Connection refused for data connection + S'ha rebutjat la connexió per connexió de dades + + + Unknown error + Error desconegut + + + Connecting to host failed: +%1 + No s'ha pogut connectar a l'amfitrió: +%1 + + + Login failed: +%1 + Identificació fallida: +%1 + + + Listing directory failed: +%1 + No s'ha pogut llistar el directori: +%1 + + + Changing directory failed: +%1 + No s'ha pogut canviar el directori: +%1 + + + Downloading file failed: +%1 + No s'ha pogut descarregar el fitxer: +%1 + + + Uploading file failed: +%1 + No s'ha pogut carregar el fitxer: +%1 + + + Removing file failed: +%1 + No s'ha pogut suprimir el fitxer: +%1 + + + Creating directory failed: +%1 + No s'ha pogut crear el fitxer: +%1 + + + Removing directory failed: +%1 + No s'ha pogut suprimir el directori: +%1 + + + Connection closed + S'ha tancat la connexió + + + Host %1 found + Amfitrió %1 trobat + + + Connection to %1 closed + S'ha tancat la connexió amb %1 + + + Host found + Amfitrió trobat + + + Connected to host + Connectat a l'amfitrió + + + + QHostInfo + + Unknown error + Error desconegut + + + + QHostInfoAgent + + Host not found + No s'ha trobat l'amfitrió + + + Unknown address type + Tipus d'adreça desconegut + + + Unknown error + Error desconegut + + + + QHttp + + Unknown error + Error desconegut + + + Request aborted + S'ha interromput la sol·licitud + + + No server set to connect to + No s'ha especificat servidor + + + Wrong content length + Longitud del contingut errònia + + + Server closed connection unexpectedly + El servidor s'ha tancat inesperadament + + + Connection refused + S'ha rebutjat la connexió + + + Host %1 not found + No s'ha trobat l'amfitrió %1 + + + HTTP request failed + Ha fallat la sol·licitud HTTP + + + Invalid HTTP response header + Capçalera de resposta HTTP no vàlida + + + Invalid HTTP chunked body + Fragment HTTP no vàlid + + + Host %1 found + S'ha trobat l'amfitrió %1 + + + Connected to host %1 + Connectat a l'amfitrió %1 + + + Connection to %1 closed + S'ha tancat la connexió amb %1 + + + Host found + S'ha trobat l'amfitrió + + + Connected to host + Connectat a l'amfitrió + + + Connection closed + S'ha tancat la connexió + + + Proxy authentication required + Es requereix autenticació del servidor intermediari + + + Authentication required + Es requreix autenticació + + + HTTPS connection requested but SSL support not compiled in + S'ha fet la consulta HTTP però no hi ha suport compilat per a SSL + + + Connection refused (or timed out) + S'ha rebutjat la connexió (temps d'espera excedit) + + + Proxy requires authentication + Es requereix autenticació del servidor intermediari + + + Host requires authentication + Es requereix autenticació de l'amfitrió + + + Data corrupted + Dades corruptes + + + Unknown protocol specified + El protocol esfecificat és desconegut + + + SSL handshake failed + S'ha produït un error en la conformitat de connexió SSL + + + + QHttpSocketEngine + + Authentication required + Es requreix autenticació + + + + QIBaseDriver + + Error opening database + S'ha produït un error en obrir la base de dades + + + Could not start transaction + No s'ha pogut iniciar la transcacció + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback transaction + No es pot fer arrere la transacció + + + + QIBaseResult + + Unable to create BLOB + No es pot crear BLOB + + + Unable to write BLOB + No es pot escriure BLOB + + + Unable to open BLOB + No es pot obrir BLOB + + + Unable to read BLOB + No es pot llegir BLOB + + + Could not find array + No s'ha pogut trobar el vector + + + Could not get array data + No s'han pogut obtindre les dades del vector + + + Could not get query info + No s'ha pogut obtindre la informacio de la consulta + + + Could not start transaction + No s'ha pogut iniciar la transcacció + + + Unable to commit transaction + No es pot validar la transacció + + + Could not allocate statement + No s'ha pogut assignar la declaració + + + Could not prepare statement + No s'ha pogut preparar la declaració + + + Could not describe input statement + No s'ha pogut descriure la declaració d'entrada + + + Could not describe statement + No s'ha pogut descriure la declaració + + + Unable to close statement + No es pot tancar la declaració + + + Unable to execute query + No es pot executar la consulta + + + Could not fetch next item + No s'ha pogut recollir l'element següent + + + Could not get statement info + No s'ha pogut obtindre la informacio de la declaració + + + + QIODevice + + Permission denied + S'ha denegat el permís + + + Too many open files + Hi ha massa fitxers oberts + + + No such file or directory + No s'ha trobat el fitxer o directori + + + No space left on device + No hi ha espai lliure en el dispositiu + + + Unknown error + Error desconegut + + + + QInputContext + + XIM + XIM + + + XIM input method + Mètode d'entrada XIM + + + Windows input method + Mètode d'entrada Windows + + + Mac OS X input method + Mètode d'entrada Mac OS X + + + + QLibrary + + QLibrary::load_sys: Cannot load %1 (%2) + QLibrary::load_sys: No es pot carregar %1 (%2) + + + QLibrary::unload_sys: Cannot unload %1 (%2) + QLibrary::unload_sys: No es pot descarregar %1 (%2) + + + QLibrary::resolve_sys: Symbol "%1" undefined in %2 (%3) + QLibrary::resolve_sys: Símbol "%1" indefinit en %2 (%3) + + + Could not mmap '%1': %2 + No s'ha pogut mmap '%1': %2 + + + Plugin verification data mismatch in '%1' + Les dades de verificació del connector són diferents en '%1' + + + Could not unmap '%1': %2 + No s'ha pogut desmapejar '%1': %2 + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + El connector '%1' usa biblioteca Qt incompatible. (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + El connector '%1' usa una bilioteca Qt incompatible. S'esperava build key "%2", got "%3" + + + Unknown error + Error desconegut + + + The shared library was not found. + No s'ha trobat la biblioteca compartida. + + + The file '%1' is not a valid Qt plugin. + El fitxer '%1' no s'un connector Qt vàlid. + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + El connector '%1' fa servir una biblioteca Qt incompatible. (No es poden barrejar les biblioteques de depuració i llançament.) + + + + QLineEdit + + &Undo + &Desfés + + + &Redo + &Refés + + + Cu&t + Re&talla + + + &Copy + &Copia + + + &Paste + Engan&xa + + + Delete + Suprimeix + + + Select All + Selecciona-ho tot + + + + QLocalServer + + %1: Name error + %1: Error de nom + + + %1: Permission denied + %1: S'ha denegat el permís + + + %1: Address in use + %1: L'adreça ja és en ús + + + %1: Unknown error %2 + %1: Error desconegut %2 + + + + QLocalSocket + + %1: Connection refused + %1: S'ha rebutjat la connexió + + + %1: Remote closed + %1: S'ha tancat la sessió remota + + + %1: Invalid name + %1: Nom invàlid + + + %1: Socket access error + %1: Error d'accés al sòcol + + + %1: Socket resource error + %1: Error de recurs de sòcol + + + %1: Socket operation timed out + %1: temps d'espera superat per a l'operació de sòcol + + + %1: Datagram too large + %1: Datagrama massa llarg + + + %1: Connection error + %1: Error de connexió + + + %1: The socket operation is not supported + %1: L'operació de sòcol no es troba suportada + + + %1: Unknown error %2 + %1: error desconegut %2 + + + + QMYSQLDriver + + Unable to open database ' + No es pot obrir la base de dades ' + + + Unable to connect + No es pot connectar + + + Unable to begin transaction + No es pot començar la transacció + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback transaction + No es pot fer arrere la transacció + + + + QMYSQLResult + + Unable to fetch data + No es poden recollir les dades + + + Unable to execute query + No es pot executar la consulta + + + Unable to store result + No es pot emmagatzemar el resultat + + + Unable to prepare statement + No es pot preparar la declaració + + + Unable to reset statement + No es pot reiniciar la declaració + + + Unable to bind value + No es pot vincular el valor + + + Unable to execute statement + No es pot executar la declaració + + + Unable to bind outvalues + No es poden vincular els valors d'eixida + + + Unable to store statement results + No es poden emmagatzemar els resultats de la declaracio + + + Unable to execute next query + No es pot executar la següent consulta + + + Unable to store next result + No es pot emmagatzemar el següent resultat + + + + QMdiArea + + (Untitled) + (sense títol) + + + + QMdiSubWindow + + %1 - [%2] + %1 - [%2] + + + Close + Tanca + + + Minimize + Minimitza + + + Restore Down + Restaura a sota + + + &Restore + &Restaura + + + &Move + &Mou + + + &Size + Mi&da + + + Mi&nimize + Mi&nimitza + + + Ma&ximize + Ma&ximitza + + + Stay on &Top + Sempre per damun&t + + + &Close + &Tanca + + + - [%1] + - [%1] + + + Maximize + Maximitza + + + Unshade + Desenfosqueix + + + Shade + Enfosqueix + + + Restore + Restaura + + + Help + Ajuda + + + Menu + Menú + + + + QMenu + + Close + Tanca + + + Open + Obri + + + Execute + Executa + + + + QMessageBox + + Help + Ajuda + + + OK + D'acord + + + About Qt + Quant a Qt + + + <p>This program uses Qt version %1.</p> + <p>Este programa usa Qt versió %1.</p> + + + Show Details... + Mostra els detalls... + + + Hide Details... + Oculta els detalls... + + + <p>This program uses Qt Open Source Edition version %1.</p><p>Qt Open Source Edition is intended for the development of Open Source applications. You need a commercial Qt license for development of proprietary (closed source) applications.</p><p>Please see <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> for an overview of Qt licensing.</p> + <p>Este programa usa Qt Open Source Edition versió %1.</p><p>Qt Open Source Edition està pensat per al desenvolupament d'aplicacions de codi obert. Necessiteu una llicència comercial de Qt per al desenvolupament d'aplicacions de propietat (codi tancat).</p><p>Vegeu <a href="http://www.trolltech.com/company/model/">www.trolltech.com/company/model/</a> per a més informació sobre les llicències Qt.</p> + + + <h3>About Qt</h3>%1<p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is a Nokia product. See <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> for more information.</p> + <h3>Quant a Qt</h3>%1<p>Qt és un toolkit C++ multiplataforma per al desenvolupament d'aplicacions.</p><p>Qt proveeix portabilitat a MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux i la gran part de totes les variants Unix comercials. Qt també es troba disponible per a dispositius empotrats.</p><p>Qt és un producte de Nokia. Vegeu <a href="http://www.trolltech.com/qt/">www.trolltech.com/qt/</a> per a més informació.</p> + + + + QMultiInputContext + + Select IM + Selecciona IM + + + + QMultiInputContextPlugin + + Multiple input method switcher + Commutador de mètode d'entrada multiple + + + Multiple input method switcher that uses the context menu of the text widgets + Commutador de mètode d'entrada multiple que usa el menu contextual del giny de text + + + + QNativeSocketEngine + + The remote host closed the connection + L'amfitrió remot ha tancat la connexió + + + Network operation timed out + L'operació de xarxa ha excedit el temps + + + Out of resources + Sense recursos + + + Unsupported socket operation + Operacio de sòcol no implementada + + + Protocol type not supported + Tipus de protocol no implementat + + + Invalid socket descriptor + Descriptor de sòcol no vàlid + + + Network unreachable + La xarxa no és accessible + + + Permission denied + S'ha denegat el permís + + + Connection timed out + La connexió ha excedit el temps + + + Connection refused + S'ha rebutjat la connexió + + + The bound address is already in use + Ja s'està fent servir l'adreça limit + + + The address is not available + L'adreça no està disponible + + + The address is protected + L'adreça està protegida + + + Unable to send a message + No es pot enviar un missatge + + + Unable to receive a message + No es pot rebre un missatge + + + Unable to write + No es pot escriure + + + Network error + Error de xarxa + + + Another socket is already listening on the same port + Un altre sòcol ja està escoltant el mateix port + + + Unable to initialize non-blocking socket + No es pot inicialitzar el sòcol no bloquejat + + + Unable to initialize broadcast socket + No es pot inicialitzar el sòcol de difusio + + + Attempt to use IPv6 socket on a platform with no IPv6 support + S'està provant de fer servir un sòcol IPv6 en una plataforma que no admet IPv6 + + + Host unreachable + L'amfitrió no és accessible + + + Datagram was too large to send + El datagrama era massa llarg i no s'ha pogut enviar + + + Operation on non-socket + L'operació no té un sòcol + + + Unknown error + Error desconegut + + + The proxy type is invalid for this operation + El tipus de proxy no és vàlid per a esta operació + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Sol·licitud per obrir un fitxer no local %1 + + + Error opening %1: %2 + S'ha produït un error mentre s'obria %1: %2 + + + Write error writing to %1: %2 + S'ha produït un error d'escriptura a %1: %2 + + + Cannot open %1: Path is a directory + No es pot obrir %1: la ruta és un directori + + + Read error reading from %1: %2 + S'ha produït un error a %1: %2 + + + + QNetworkAccessFtpBackend + + Cannot open %1: is a directory + No es pot obrir %1: és un directori + + + Logging in to %1 failed: authentication required + Ha fallat l'entrada a %1: es requereix autenticació + + + Error while downloading %1: %2 + S'ha produït un error mentre es baixava %1: %2 + + + Error while uploading %1: %2 + S'ha produït un error mentre es pujava %1: %2 + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + S'ha produït un error mentre es descarregava %1 - el servidor va respondre: %2 + + + Protocol "%1" is unknown + El protocol "%1" és desconegut + + + + QNetworkReplyImpl + + Operation canceled + S'ha cancel·lat l'operació + + + + QOCIDriver + + Unable to logon + No es pot iniciar la sessió + + + Unable to initialize + QOCIDriver + No es pot inicialitzar + + + Unable to begin transaction + No es pot començar la transacció + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback transaction + No es pot fer arrere la transacció + + + + QOCIResult + + Unable to bind column for batch execute + No es pot vincular una columna per a executar el lot + + + Unable to execute batch statement + No es pot executar la declaració de lot + + + Unable to goto next + No es pot anar al següent + + + Unable to alloc statement + No es pot assignar la declaració + + + Unable to prepare statement + No es pot preparar la declaració + + + Unable to bind value + No es pot vincular el valor + + + Unable to execute select statement + No es pot executar la declaració select + + + Unable to execute statement + No es pot executar la declaració + + + + QODBCDriver + + Unable to connect + No es pot connectar + + + Unable to connect - Driver doesn't support all needed functionality + No es pot connectar - El controlador no permet tota la funcionalitat necessària + + + Unable to disable autocommit + No es pot deshabilitar l'autovalidació + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback transaction + No es pot fer arrere la transacció + + + Unable to enable autocommit + No es pot habilitar l'autovalidació + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: No es pot activar 'SQL_CURSOR_STATIC' com a atribut de la declaració. Comproveu la configuració del controlador ODBC + + + Unable to execute statement + No es pot executar la declaració + + + Unable to fetch next + No es pot recollir el següent + + + Unable to prepare statement + No es pot preparar la declaració + + + Unable to bind variable + No es pot vincular la variable + + + Unable to fetch last + No es pot recollir l'últim + + + Unable to fetch + No es pot recollir + + + Unable to fetch first + No es pot recollir el primer + + + Unable to fetch previous + No es pot recollir l'anterior + + + + QObject + + Operation not supported on %1 + Operació no suportada a %1 + + + Invalid URI: %1 + URI no vàlida: %1 + + + Write error writing to %1: %2 + Error d'escriptura a %1: %2 + + + Read error reading from %1: %2 + Error de lectura des de %1: %2 + + + Socket error on %1: %2 + Error de sòcol a %1: %2 + + + Remote host closed the connection prematurely on %1 + Amfitrió remot ha tancat la connexió en %1 + + + Protocol error: packet of size 0 received + Error de protocol: s'ha rebut un paquet de mida 0 + + + + QPPDOptionsModel + + Name + Nom + + + Value + Valor + + + + QPSQLDriver + + Unable to connect + No es pot connectar + + + Could not begin transaction + No s'ha pogut començar la transcacció + + + Could not commit transaction + No s'ha pogut validar la transacció + + + Could not rollback transaction + No s'ha pogut fer arrere la transacció + + + Unable to subscribe + No es pot subscriure + + + Unable to unsubscribe + No es pot donar de baixa + + + + QPSQLResult + + Unable to create query + No es pot crear la consulta + + + Unable to prepare statement + No es pot preparar la declaració + + + + QPageSetupWidget + + Centimeters (cm) + Centímetres (cm) + + + Millimeters (mm) + Milímetres (mm) + + + Inches (in) + Polçades (in) + + + Points (pt) + Punts (pt) + + + Form + Formulari + + + Paper + Paper + + + Page size: + Mida de la pàgina: + + + Width: + Amplada: + + + Height: + Alçada: + + + Paper source: + Font del paper: + + + Orientation + Orientació + + + Portrait + Vertical + + + Landscape + Horitzontal + + + Reverse landscape + Horitzontal revers + + + Reverse portrait + Vertical revers + + + Margins + Marges + + + top margin + Marge superior + + + left margin + Marge esquerre + + + right margin + Marge dret + + + bottom margin + Marge inferior + + + + QPluginLoader + + Unknown error + Error desconegut + + + The plugin was not loaded. + No s'ha carregat el connector. + + + + QPrintDialog + + locally connected + connectat localment + + + Aliases: %1 + Àlies: %1 + + + unknown + desconegut + + + Print To File ... + Imprimeix a un fitxer... + + + File %1 is not writable. +Please choose a different file name. + No es pot escriure al fitxer %1 +Trieu un altre nom de fitxer. + + + %1 already exists. +Do you want to overwrite it? + %1 ja existeix. +Voleu sobreescriure'l? + + + %1 is a directory. +Please choose a different file name. + %1 és un directori. +Trieu un nom de fitxer diferent. + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executiu + + + Folio + Foli + + + Ledger + Llibre + + + Legal + Legal + + + Letter + Carta + + + Tabloid + Tabloide + + + US Common #10 Envelope + US Common #10 Envelope + + + Custom + Personalitzat + + + &Options >> + &Opcions >> + + + &Print + Im&primeix + + + &Options << + &Opcions << + + + Print to File (PDF) + Imprimeix a un fitxer (PDF) + + + Print to File (Postscript) + Imprimeix a un fitxer (Postscript) + + + Local file + Fitxer local + + + Write %1 file + Escriu el fitxer %1 + + + + QPrintPreviewDialog + + Page Setup + Configuració de la pàgina + + + Print Preview + Previsualització d'impressió + + + Next page + Pàgina següent + + + Previous page + Pàgina anterior + + + First page + Primera pàgina + + + Last page + Última pàgina + + + Fit width + Ajusta a l'amplada + + + Fit page + AJusta a la pàgina + + + Zoom in + Apropa + + + Zoom out + Allunya + + + Portrait + Vertical + + + Landscape + Horitzontal + + + Show single page + Mostra una pàgina + + + Show facing pages + Mostra les pàgines + + + Show overview of all pages + Mostra un resum de totes les pàgines + + + Print + Imprimeix + + + Page setup + Configuració de la pàgina + + + Close + Tanca + + + + QPrintPropertiesWidget + + Form + Formulari + + + Page + Pàgina + + + Advanced + Avançat + + + + QPrintSettingsOutput + + Form + Formulari + + + Copies + Còpies + + + Print range + Rang d'impressió + + + Print all + Imprimeix-ho tot + + + Pages from + Pàgines des de + + + to + fins a + + + Selection + Selecció + + + Output Settings + Paràmetres d'eixida + + + Copies: + Còpies: + + + Collate + Compagina + + + Reverse + Revers + + + Options + Opcions + + + Color Mode + Mode de color + + + Color + Color + + + Grayscale + Escala de grisos + + + Duplex Printing + Impressió a doble cara + + + None + No + + + Long side + Costat llarg + + + Short side + Costat curt + + + + QPrintWidget + + Form + Formulari + + + Printer + Impressora + + + &Name: + &Nom: + + + P&roperties + P&ropietats + + + Location: + Ubicació: + + + Preview + Previsualització + + + Type: + Tipus: + + + Output &file: + &Fitxer d'eixida: + + + ... + ... + + + + QProgressDialog + + Cancel + Cancel·la + + + + QPushButton + + Open + Obri + + + + QRadioButton + + Check + Activa + + + + QRegExp + + no error occurred + cap error + + + disabled feature used + s'ha fet servir una característica no habilitada + + + bad char class syntax + error de sintaxi al tipus de caràcters + + + bad lookahead syntax + error de sintaxi a l'ullada + + + bad repetition syntax + error de sintaxi a la repetició + + + invalid octal value + valor octal invàlid + + + missing left delim + falta el delim esquerre + + + unexpected end + final inesperat + + + met internal limit + s'ha arribat al límit intern + + + + QSQLite2Driver + + Error to open database + S'ha produït un error per obrir base de dades + + + Unable to begin transaction + No es pot començar la transacció + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback Transaction + No es pot fer arrere la transacció + + + + QSQLite2Result + + Unable to fetch results + No es poden recollir els resultats + + + Unable to execute statement + No es pot executar la declaració + + + + QSQLiteDriver + + Error opening database + S'ha produït un error en obrir la base de dades + + + Error closing database + S'ha produït un error en tancar la base de dades + + + Unable to begin transaction + No es pot començar la transacció + + + Unable to commit transaction + No es pot validar la transacció + + + Unable to rollback transaction + No es pot fer arrere la transacció + + + + QSQLiteResult + + Unable to fetch row + No es pot recollir la fila + + + Unable to execute statement + No es pot executar la declaració + + + Unable to reset statement + No es pot reiniciar la declaració + + + Unable to bind parameters + No es poden vincular els paràmetres + + + Parameter count mismatch + El nombre dels paràmetres es discordant + + + No query + Cap consulta + + + + QScrollBar + + Scroll here + Desplaça ací + + + Left edge + Vora esquerra + + + Top + Superior + + + Right edge + Vora dreta + + + Bottom + Inferior + + + Page left + Pàgina esquerra + + + Page up + Pàgina amunt + + + Page right + Pàgina dreta + + + Page down + Pàgina avall + + + Scroll left + Desplaça a l'esquerra + + + Scroll up + Desplaça amunt + + + Scroll right + Desplaça a la dreta + + + Scroll down + Desplaça avall + + + Line up + Línia amunt + + + Position + Posició + + + Line down + Línia avall + + + + QSharedMemory + + %1: unable to set key on lock + %1: no es pot definir la clau del blocatge + + + %1: create size is less then 0 + %1: la mida de creació és menor que 0 + + + %1: unable to lock + %1: no es pot bloquejar + + + %1: unable to unlock + %1: no es pot desbloquejar + + + %1: permission denied + %1: permís denegat + + + %1: already exists + %1: ja existeix + + + %1: doesn't exists + %1: no existeix + + + %1: out of resources + %1: s'han sobrepassat els recursos + + + %1: unknown error %2 + %1: error desconegut %2 + + + %1: key is empty + %1: la clau és buida + + + %1: unix key file doesn't exists + %1: no existeix el fitxer de clau unix + + + %1: ftok failed + %1: ha fallat ftok + + + %1: unable to make key + %1: no es pot crear la clau + + + %1: system-imposed size restrictions + %1: el sistema ha posat restriccions de mida + + + %1: not attached + %1: no connectat + + + + QShortcut + + Space + Espai + + + Esc + Esc + + + Tab + Tab + + + Backtab + Retro Tab + + + Backspace + Retrocés + + + Return + Retorn + + + Enter + Intro + + + Ins + Ins + + + Del + Supr + + + Pause + Pausa + + + Print + Imprimeix + + + SysReq + Pet Sis + + + Home + Inici + + + End + Fi + + + Left + Esquerra + + + Up + Amunt + + + Right + Dreta + + + Down + Avall + + + PgUp + Re Pag + + + PgDown + Av Pag + + + CapsLock + Bloq Majús + + + NumLock + Bloq Num + + + ScrollLock + Bloq Despl + + + Menu + Menú + + + Help + Ajuda + + + Back + Arrere + + + Forward + Avant + + + Stop + Atura + + + Refresh + Refresca + + + Volume Down + Baixa el volum + + + Volume Mute + Silenci + + + Volume Up + Puja el volum + + + Bass Boost + Potencia els geus + + + Bass Up + Puja els greus + + + Bass Down + Baixa els greus + + + Treble Up + Puja els aguts + + + Treble Down + Baixa els aguts + + + Media Play + Inicia Mèdia + + + Media Stop + Atura Mèdia + + + Media Previous + Mèdia Anterior + + + Media Next + Mèdia Següent + + + Media Record + Grava Mèdia + + + Favorites + Preferits + + + Search + Cerca + + + Standby + Repòs + + + Open URL + Obri URL + + + Launch Mail + Inicia Correu + + + Launch Media + Inicia Mèdia + + + Launch (0) + Inicia (0) + + + Launch (1) + Inicia (1) + + + Launch (2) + Inicia (2) + + + Launch (3) + Inicia (3) + + + Launch (4) + Inicia (4) + + + Launch (5) + Inicia (5) + + + Launch (6) + Inicia (6) + + + Launch (7) + Inicia (7) + + + Launch (8) + Inicia (8) + + + Launch (9) + Inicia (9) + + + Launch (A) + Inicia (A) + + + Launch (B) + Inicia (B) + + + Launch (C) + Inicia (C) + + + Launch (D) + Inicia (D) + + + Launch (E) + Inicia (E) + + + Launch (F) + Inicia (F) + + + Print Screen + Impr Pant + + + Page Up + Re Pag + + + Page Down + Av Pag + + + Caps Lock + Bloq Majús + + + Num Lock + Bloq Num + + + Number Lock + Bloq Num + + + Scroll Lock + Bloq Despl + + + Insert + Insert + + + Delete + Suprimeix + + + Escape + Esc + + + System Request + Pet Sis + + + Select + Selec + + + Yes + + + + No + No + + + Context1 + Context1 + + + Context2 + Context2 + + + Context3 + Context3 + + + Context4 + Context4 + + + Call + Crida + + + Hangup + Penja + + + Flip + Inverteix + + + Ctrl + Ctrl + + + Shift + Shift + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + Home Page + Pàgina d'inici + + + + QSlider + + Page left + Pàgina esquerra + + + Page up + Pàgina amunt + + + Position + Posició + + + Page right + Pàgina dreta + + + Page down + Pàgina avall + + + + QSocks5SocketEngine + + Socks5 timeout error connecting to socks server + error de temps excedit Socks5 mentre es connectava al servidor de sòcols + + + Network operation timed out + L'operació de xarxa ha excedit el temps + + + + QSpinBox + + More + Més + + + Less + Menys + + + + QSql + + Delete + Suprimeix + + + Delete this record? + Voleu suprimir este registre? + + + Yes + + + + No + No + + + Insert + Insereix + + + Update + Actualitza + + + Save edits? + Voleu alçar els canvis? + + + Cancel + Cancel·la + + + Confirm + Confirmació + + + Cancel your edits? + Voleu cancel·lar els canvis? + + + + QSslSocket + + Unable to write data: %1 + No es poden escriure les dades: %1 + + + Error while reading: %1 + S'ha produït un error en llegir: %1 + + + Error during SSL handshake: %1 + S'ha produït un error en la conformitat de connexió SSL: %1 + + + Error creating SSL context (%1) + S'ha produït un error en crear el context SSL (%1) + + + Invalid or empty cipher list (%1) + Llista de xifres no vàlida o buida (%1) + + + Error creating SSL session, %1 + S'ha produït un error en crear la sessió SSL, %1 + + + Error creating SSL session: %1 + S'ha produït un error en crear la sessió SSL: %1 + + + Cannot provide a certificate with no key, %1 + No es pot proveir un certificat sense una clau, %1 + + + Error loading local certificate, %1 + S'ha produït un error en carregar el certificat local, %1 + + + Error loading private key, %1 + S'ha produït un error en carregar la clau privada, %1 + + + Private key does not certificate public key, %1 + La clau privada no certifica la clau pública, %1 + + + + QTDSDriver + + Unable to open connection + No es pot obrir la connexió + + + Unable to use database + No es pot usar la base de dades + + + + QTabBar + + Scroll Left + Desplaça a l'esquerra + + + Scroll Right + Desplaça a la dreta + + + + QTextControl + + &Undo + &Desfés + + + &Redo + &Refés + + + Cu&t + Re&talla + + + &Copy + &Copia + + + Copy &Link Location + Copia l'adreça de l'en&llaç + + + &Paste + Engan&xa + + + Delete + Suprimeix + + + Select All + Selecciona-ho tot + + + + QToolButton + + Press + Premeu + + + Open + Obri + + + + QUdpSocket + + This platform does not support IPv6 + Esta plataforma no admet IPV6 + + + + QUndoGroup + + Undo + Desfés + + + Redo + Refés + + + + QUndoModel + + <empty> + <buit> + + + + QUndoStack + + Undo + Desfés + + + Redo + Refés + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM Marca esquerra-a-dreta + + + RLM Right-to-left mark + RLM marca dreta-a-esquerra + + + ZWJ Zero width joiner + ZWJ Zero width joiner + + + ZWNJ Zero width non-joiner + ZWNJ Zero width non-joiner + + + ZWSP Zero width space + ZWSP Espai d'amplada zero + + + LRE Start of left-to-right embedding + LRE Inici de la incrustació esquerra-a-dreta + + + RLE Start of right-to-left embedding + RLE Inici de la incrustació dreta-a-esquerra + + + LRO Start of left-to-right override + LRO Inici de la sobreescriptura esquerra-a-dreta + + + RLO Start of right-to-left override + RLO Inici de la sobreescriptura dreta-a-esquerra + + + PDF Pop directional formatting + PDF Pop directional formatting + + + Insert Unicode control character + Insereix un caràcter de control Unicode + + + + QWebFrame + + Request cancelled + S'ha cancel·lat la sol·licitud + + + Request blocked + S'ha bloquejat la sol·licitud + + + Cannot show URL + No es pot mostrar l'URL + + + Frame load interruped by policy change + S'ha interromput la càrrega per canvi de política + + + Cannot show mimetype + No es pot mostrar el mimetype + + + File does not exist + El fitxer no existeix + + + + QWebPage + + Bad HTTP request + Ha fallat la sol·licitud HTTP + + + Submit + default label for Submit buttons in forms on web pages + Envia + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + Envia + + + Reset + default label for Reset buttons in forms on web pages + Reinicia + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + Este és un índex on es pot cercar. Introduïu les paraules de cerca: + + + Choose File + title for file button used in HTML forms + Trieu un fitxer + + + No file selected + text to display in file button used in HTML forms when no file is selected + No s'ha seleccionat cap fitxer + + + Open in New Window + Open in New Window context menu item + Obri a una nova finestra + + + Save Link... + Download Linked File context menu item + Alça l'enllaç... + + + Copy Link + Copy Link context menu item + Copia l'enllaç + + + Open Image + Open Image in New Window context menu item + Obri la imatge + + + Save Image + Download Image context menu item + Alça la imatge + + + Copy Image + Copy Link context menu item + Copia la imatge + + + Open Frame + Open Frame in New Window context menu item + Obri el marc + + + Copy + Copy context menu item + Copia + + + Go Back + Back context menu item + Vés arrere + + + Go Forward + Forward context menu item + Vés avant + + + Stop + Stop context menu item + Atura + + + Reload + Reload context menu item + Torna a carregar + + + Cut + Cut context menu item + Retalla + + + Paste + Paste context menu item + Enganxa + + + No Guesses Found + No Guesses Found context menu item + No s'ha trobat cap suposició + + + Ignore + Ignore Spelling context menu item + Ignora + + + Add To Dictionary + Learn Spelling context menu item + Afig al diccionari + + + Search The Web + Search The Web context menu item + Cerca al web + + + Look Up In Dictionary + Look Up in Dictionary context menu item + Cerca al diccionari + + + Open Link + Open Link context menu item + Obri l'enllaç + + + Ignore + Ignore Grammar context menu item + Ignora + + + Spelling + Spelling and Grammar context sub-menu item + Ortografia + + + Show Spelling and Grammar + menu item title + Mostra l'ortografia i la gramàtica + + + Hide Spelling and Grammar + menu item title + Amaga l'ortografia i la gramàtica + + + Check Spelling + Check spelling context menu item + Comprova l'ortografia + + + Check Spelling While Typing + Check spelling while typing context menu item + Comprova l'ortografia mentre s'escriu + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Comprova la gramàtica mentre s'escriu + + + Fonts + Font context sub-menu item + Tipus de lletra + + + Bold + Bold context menu item + Negreta + + + Italic + Italic context menu item + Cursiva + + + Underline + Underline context menu item + Subratllat + + + Outline + Outline context menu item + Contorn + + + Direction + Writing direction context sub-menu item + Direcció + + + Default + Default writing direction context menu item + Per defecte + + + LTR + Left to Right context menu item + EAD + + + RTL + Right to Left context menu item + DAE + + + Inspect + Inspect Element context menu item + Inspecciona + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + No hi ha cerques recents + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + Cerques recents + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Neteja les cerques recents + + + Unknown + Unknown filesize FTP directory listing item + Desconegut + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2x%3 píxels) + + + Web Inspector - %2 + Web inspector - %2 + + + + QWhatsThisAction + + What's This? + Què és això? + + + + QWidget + + * + * + + + + QWizard + + Go Back + Vés arrere + + + Continue + Continua + + + Commit + Valida + + + Done + Fet + + + Quit + Ix + + + Help + Ajuda + + + < &Back + < &Arrere + + + &Finish + &Finalitza + + + Cancel + Cancel·la + + + &Help + A&juda + + + &Next + Següe&n + + + &Next > + Següe&nt > + + + + QWorkspace + + &Restore + &Restaura + + + &Move + &Mou + + + &Size + Mi&da + + + Mi&nimize + Mi&nimitza + + + Ma&ximize + Ma&ximitza + + + &Close + &Tanca + + + Stay on &Top + &Sempre per damunt + + + Sh&ade + &Ombra + + + %1 - [%2] + %1 - [%2] + + + Minimize + Minimitza + + + Restore Down + Restaura a sota + + + Close + Tanca + + + &Unshade + &Ombreja + + + + QXml + + no error occurred + no s'ha produït cap error + + + error triggered by consumer + error provocat per l'usuari + + + unexpected end of file + final del fitxer inesperat + + + more than one document type definition + més d'una definició del tipus de document + + + error occurred while parsing element + s'ha produït un error mentre s'analitzava l'element + + + tag mismatch + marca discordant + + + error occurred while parsing content + s'ha produït un error mentre s'analitzava el contingut + + + unexpected character + caràcter inesperat + + + invalid name for processing instruction + nom per processar la instrucció no vàlid + + + version expected while reading the XML declaration + s'esperava llegir la versió en llegir la declaració XML + + + wrong value for standalone declaration + valor erroni per a la declaració 'standalone' + + + encoding declaration or standalone declaration expected while reading the XML declaration + s'esperava la declaració 'encoding' o 'standalone' en llegir la declaració XML + + + standalone declaration expected while reading the XML declaration + s'esperava la declaració 'standalone' en llegir la declaració XML + + + error occurred while parsing document type definition + s'ha produït un error mentre s'analitzava la definició del tipus de document + + + letter is expected + s'espera una carta + + + error occurred while parsing comment + s'ha produït un error quan s'analitzava el document + + + error occurred while parsing reference + s'ha produït un error quan s'analitzava la referència + + + internal general entity reference not allowed in DTD + no estan permeses referències internes a entitats generals a la DTD + + + external parsed general entity reference not allowed in attribute value + no estan permeses referències externes a entitats generals que ja s'han analitzat al valor de l'atribut + + + external parsed general entity reference not allowed in DTD + no estan permeses referències externes a entitats generals que ja s'han analitzat a la DTD + + + unparsed entity reference in wrong context + referència a la entitat no analitzada en un context inadequat + + + recursive entities + entitats recursives + + + error in the text declaration of an external entity + error a la declaració textual d'una entitat externa + + + + QXmlStream + + Extra content at end of document. + Contingut extra al final del document. + + + Invalid entity value. + valor d'entitat no vàlid. + + + Invalid XML character. + Caràcter XML no vàlid. + + + Sequence ']]>' not allowed in content. + Seqüència ']]>' no permesa en el contingut. + + + Namespace prefix '%1' not declared + Prefix '%1' del namespace no declarat + + + Attribute redefined. + S'ha tornat a definir l'atribut. + + + Unexpected character '%1' in public id literal. + Caràcter '%1' inesperat en literal id públic. + + + Invalid XML version string. + Cadena de versió XML no vàlida. + + + Unsupported XML version. + Versió XML no compatible. + + + %1 is an invalid encoding name. + %1 és un nom de codificació no vàlid. + + + Encoding %1 is unsupported + La codificació %1 no és compatible + + + Standalone accepts only yes or no. + 'Standalone' només accepta sí o no. + + + Invalid attribute in XML declaration. + Atribut no vàlid en la declaració XML. + + + Premature end of document. + Final del document prematur. + + + Invalid document. + Document no vàlid. + + + Expected + Esperat + + + , but got ' + , però té ' + + + Unexpected ' + Inesperat ' + + + Expected character data. + S'esperaven dades del caràcter. + + + Recursive entity detected. + S'ha detectat una entitat recursiva. + + + Start tag expected. + S'esperava l'inici de marca. + + + XML declaration not at start of document. + Hi ha una declaració XML que no està al començament del document. + + + NDATA in parameter entity declaration. + NDATA en la declaració de l'entitat d'un paràmetre. + + + %1 is an invalid processing instruction name. + %1 és un nom per processar la instrucció no vàlid. + + + Invalid processing instruction name. + Nom per processar la instrucció no vàlid. + + + Illegal namespace declaration. + Declaració 'namespace' il·legal. + + + Invalid XML name. + Nom XML no vàlid. + + + Opening and ending tag mismatch. + L'obertura i el tancament de la marca no concorden. + + + Reference to unparsed entity '%1'. + Referència a l'entitat no analitzada '%1'. + + + Entity '%1' not declared. + Entitat '%1' no declarada. + + + Reference to external entity '%1' in attribute value. + Referència a l'entitat externa '%1' en valor atribut. + + + Invalid character reference. + Referència de caràcter no vàlida. + + + Encountered incorrectly encoded content. + S'ha trobat contingut codificat incorrectament. + + + The standalone pseudo attribute must appear after the encoding. + El pseudo atribut 'standalone' ha d'aparèixer després de la codificació. + + + %1 is an invalid PUBLIC identifier. + %1 és un identificador PUBLIC no vàlid. + + + + QtXmlPatterns + + An %1-attribute with value %2 has already been declared. + Ja s'ha declarat un atribut %1 amb un valor %2. + + + An %1-attribute must have a valid %2 as value, which %3 isn't. + Un atribut %1 ha de tindre com a valor vàlid %2, cosa que %3 no és. + + + Network timeout. + La connexió ha excedit el temps. + + + Element %1 can't be serialized because it appears outside the document element. + No es pot llistar l'element %1 perquè pareix que es troba fora l'element document. + + + Attribute %1 can't be serialized because it appears at the top level. + No es pot llistar l'atribut %1 perquè pareix que es troba a dalt de tot. + + + Year %1 is invalid because it begins with %2. + L'any %1 no és vàlid perquè comença amb %2. + + + Day %1 is outside the range %2..%3. + El dia %1 es troba fora del rang %2..%3. + + + Month %1 is outside the range %2..%3. + El mes %1 es troba fora del rang %2..%3. + + + Overflow: Can't represent date %1. + Desbordament: no es pot representar la data %1. + + + Day %1 is invalid for month %2. + El dia %1 no és vàlid per al mes %2. + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + Temps 24:%1:%2.%3 no és vàlid. L''hora és 24, però els minuts, segons i milisegons no són tots 0; + + + Time %1:%2:%3.%4 is invalid. + Temps %1:%2.%3.%4 no és vàlid. + + + Overflow: Date can't be represented. + Desbordament: no es pot representar la data. + + + At least one component must be present. + Com a mínim un dels elements ha de ser present. + + + At least one time component must appear after the %1-delimiter. + Com a mínim un component de l'hora ha d'aparèixer després del delimitador %1. + + + No operand in an integer division, %1, can be %2. + Sense operants en una divisó d'enters, %1, pot ser %2. + + + The first operand in an integer division, %1, cannot be infinity (%2). + El primer operant en una divisió d'enters, %1, no pot ser infinit (%2). + + + The second operand in a division, %1, cannot be zero (%2). + El segon operant en una divisió, %1, no pot ser cero (%2). + + + %1 is not a valid value of type %2. + %1 no és un valor vàlid del tipus %2. + + + When casting to %1 from %2, the source value cannot be %3. + Quan s'emet %1 des de %2, el valor font no pot ser %3. + + + Integer division (%1) by zero (%2) is undefined. + La divisió entera (%1) per cero (%2) no està definida. + + + Division (%1) by zero (%2) is undefined. + La divisió (%1) per cero (%2) no està definida. + + + Modulus division (%1) by zero (%2) is undefined. + La divisió modular (%1) per cero (%2) no està definida. + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + No està permés dividir un valor del tipus %1 per un del tipus %2 (no és un número). + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + No està permesa la divisió d'un valor del tipus %1 per un del tipus %2 o %3 (per sobre o sota de cero). + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + No està permesa la multiplicació d'un valor del tipus %1 per un del tipus %2 o %3 (més o menys infinit). + + + A value of type %1 cannot have an Effective Boolean Value. + Un valor del tipus %1 no pot tindre un valor booleà efectiu. + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + Un valor booleà efectiu no pot calcular-se per a una seqüència contenint dos o més valors atòmics. + + + Value %1 of type %2 exceeds maximum (%3). + El valor %1 del tipus %2 excedeix el màxim (%3). + + + Value %1 of type %2 is below minimum (%3). + El valor %1 del tipus %2 es troba per sota del mínim (%3). + + + A value of type %1 must contain an even number of digits. The value %2 does not. + Un valor del tipus %1 ha de contindre un valor senar de dígits. El valor %2 no el conté. + + + %1 is not valid as a value of type %2. + %1 no és vàlid com a valor del tipus %2. + + + Operator %1 cannot be used on type %2. + L'operador %1 no pot fer-se servir en el tipus %2. + + + Operator %1 cannot be used on atomic values of type %2 and %3. + L'operador %1 no pot fer-se servir en valors atòmics del tipus %2 i %3. + + + The namespace URI in the name for a computed attribute cannot be %1. + L'URI del nom per a un atribut computat no pot ser %1. + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + El nom per a un valor computat no pot tindre una URI %1 amb un nom local %2. + + + Type error in cast, expected %1, received %2. + S'ha produït un error, s'esperava %1 i s'ha rebut %2. + + + When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. + Quan s'emet a %1 o a tipus derivats, la font del valor ha de ser del mateix tipus, o una cadena literal. El tipus %2 no està permés. + + + No casting is possible with %1 as the target type. + No hi ha possibilitat d'emissió amb %1 com a tipus objectiu. + + + It is not possible to cast from %1 to %2. + No és possible emitir des de %1 a %2. + + + Casting to %1 is not possible because it is an abstract type, and can therefore never be instantiated. + No és possible l'emissió a %1 perquè és un tipus abstract, i no podrà ser mai instanciat. + + + It's not possible to cast the value %1 of type %2 to %3 + No és possible emitir el valor %1 del tipus %2 a %3 + + + Failure when casting from %1 to %2: %3 + S'ha produït una fallada quan s'emetia des de %1 a %2: %3 + + + A comment cannot contain %1 + Un comentari no pot contindre %1 + + + A comment cannot end with a %1. + Un comentari no pot acabar amb %1. + + + No comparisons can be done involving the type %1. + No es poden fer comparacions amb el tipus %1. + + + Operator %1 is not available between atomic values of type %2 and %3. + L'operador %1 no està disponible per a valors atòmics del tipus %2 i %3. + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + Un node atribut no pot ser un fill d'un node document. Per tant, l'atribut %1 està fora de lloc. + + + A library module cannot be evaluated directly. It must be imported from a main module. + Un mòdul de biblioteca no pot evaluar-se directament. Ha de ser importat des d'un mòdul principal. + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + Un valor del tipus %1 no pot ser un predicat. Un predicat ha de tindre un tipus numèric o un tipus valor booleà efectiu. + + + A positional predicate must evaluate to a single numeric value. + Un predicat posicioanl ha d'evaluar un únic valor numèric. + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid. + El nom objectiu en una instració de processat no pot ser %1 en cap combinació en majúscules o minúscules. Per tant, no és vàlid %2. + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + %1 no és un nom objectiu vàlid en una instrucció de processat. Ha de ser un valor %2, e.x. %3. + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + L'últim pas a una ruta ha de contindre nodes o valors atòmics. No pot ser una barreja dels dos. + + + The data of a processing instruction cannot contain the string %1 + Les dades d'una instrucció de processat no poden contindre la cadena %1 + + + No namespace binding exists for the prefix %1 + No existeix cap vinculació per al prefix %1 + + + No namespace binding exists for the prefix %1 in %2 + No existeix cap vinculació per al prefix %1 a %2 + + + %1 is an invalid %2 + %1 és un %2 no vàlid + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + %1 fa servir com a màxim %n(s) argument. Per tant, %2 no és vàlid. + %1 fa servir com a màxim %n(s) arguments. Per tant, %2 no és vàlid. + %1 fa servir com a màxim %n(s) arguments. Per tant, %2 no és vàlid. + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + %1 requereix com a mínim %n argument. Per tant, %2 no és vàlid. + %1 requereix com a mínim %n arguments. Per tant, %2 no és vàlid. + %1 requereix com a mínim %n arguments. Per tant, %2 no és vàlid. + + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + El primer argument per a %1 no pot ser del tipus %2. Ha de ser un tipus numèric, xs:anymesdurada o xs:diahoradurada. + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + El primer argument per a %1 no pot ser del tipus %2. Ha de ser del tipus %3, %4 o %5. + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + El segon argument per a %1 no pot ser del tipus %2. Ha de ser del tipus %3, %4 o %5. + + + %1 is not a valid XML 1.0 character. + %1 no és un caràcter XML 1.0 vàlid. + + + The first argument to %1 cannot be of type %2. + El primer argument per a %1 no pot ser del tipus %2. + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + Si els dos valors tenen retards de zona, han de tindre el mateix retard de zona. %1 i %2 no tenen el mateix. + + + %1 was called. + Es va cridar %1. + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + %1 ha de ser continuat per %2 o %3, no un final de la cadena de reemplaç. + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + A la cadena de reemplaç, %1 ha d'estar seguit per almenys un dígit quan no s'ometi. + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + A la cadena de reemplaç, %1 només pot fer-se servir per omissió o %2, no per %3 + + + %1 matches newline characters + %1 coincideix amb caràcters de nova línia + + + %1 and %2 match the start and end of a line. + %1 i %2 coincideixen a l'inici i al final de línia. + + + Matches are case insensitive + Coincideixen les majúscules + + + Whitespace characters are removed, except when they appear in character classes + Els espais en blanc s'eliminen, excepte quan apareixen en classes de caràcter + + + %1 is an invalid regular expression pattern: %2 + %1 no és un patró d'expressió regular: %2 + + + %1 is an invalid flag for regular expressions. Valid flags are: + %1 és un indicador no vàlid per a expressions regulars. Indicadors vàlids són: + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + Si el primer argument és una seqüència buida o una cadena de mida cero (sense espais), no es pot especificar un prefix. S'ha especificat el prefix %1. + + + It will not be possible to retrieve %1. + No serà possible obtindre %1. + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + El node root del segon argument de la funció %1 ha de ser un node document. %2 no és un node document. + + + The default collection is undefined + No està definida la col·lecció per defecte + + + %1 cannot be retrieved + No s'ha pogut obtindre %1 + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + No està suportat el formulari de normalització %1. El formularis suportats són %2, %3, %4 i %5, i buit, i.e. una cadena buida (sense normalització). + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + Una zona de retard ha d'estar en el rang %1..%2 inclosos. %3 està fora del rang. + + + %1 is not a whole number of minutes. + %1 no és un valor enter de minuts. + + + Required cardinality is %1; got cardinality %2. + Es requereix un cardinal %1; es va enviar el cardinal %2. + + + The item %1 did not match the required type %2. + L'ítem %1 no coincideix amb el tipus requerit %2. + + + %1 is an unknown schema type. + %1 és un tipus esquema desconegut. + + + Only one %1 declaration can occur in the query prolog. + Només una declaració %1 pot aparèixer en el pròleg de consulta. + + + The initialization of variable %1 depends on itself + La inicialització de la variable %1 depèn d'ella mateixa + + + No variable by name %1 exists + No existeix cap variable amb el nom %1 + + + The variable %1 is unused + No es fa servir la variable %1 + + + Version %1 is not supported. The supported XQuery version is 1.0. + No està suportada la versió %1. La versió suportada d'XQuery és l'1.0. + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + La codificació %1 no és vàlida. Només ha de contindre caràcters llatins, no pot contindre espais i ha de coincidir amb l'expressió regular %2. + + + No function with signature %1 is available + No hi ha cap funció disponible am la signatura %1 + + + A default namespace declaration must occur before function, variable, and option declarations. + Una declaració nomespai per defecte ha d'ocòrrer abans de la funció, variable i declaracions d'opció. + + + Namespace declarations must occur before function, variable, and option declarations. + Una declaració nomespai ha d'ocòrrer abans de la funció, variable i declaracions d'opció. + + + Module imports must occur before function, variable, and option declarations. + La importació de mòduls ha d'ocòrrer abans de la funció, variable i declaracions d'opció. + + + It is not possible to redeclare prefix %1. + No es pot tornar a declarar el prefix %1. + + + Only the prefix %1 can be declared to bind the namespace %2. By default, it is already bound to the prefix %1. + Només el prefix %1 pot ser declarat per enllaçar el nomespai %2. Per defecte, ja està enllaçat al prefix %1. + + + Prefix %1 is already declared in the prolog. + El prefix %1 ja està declarat al pròleg. + + + The name of an option must have a prefix. There is no default namespace for options. + El nom d'una opció ha de tindre un prefix. No hi ha nomespai per defecte per a opcions. + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + No està suportada la característica d'importació d'esquema, i per tant les delcaracions %1 no ocorreran. + + + The target namespace of a %1 cannot be empty. + El nomespai objectiu d'un %1 no pot ser buit. + + + The module import feature is not supported + La importació de mòduls no està suportada + + + A variable by name %1 has already been declared in the prolog. + Ja s'ha declarat una variable amb el nom %1 al pròleg. + + + No value is available for the external variable by name %1. + No hi ha cap valor disponible per a la variable externa amb el nom %1. + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this) + El nomespai per a una funció definida per l'usuari no pot estar buit (proveu amb el prefix predefinit %1 que existeix per a casos com este) + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + El nomespai %1 està reservat; a més, les funcions definides per l'usuari no haurien de fer-lo servir. Proveu el prefix predefinit %2 que existeix per a casos com este. + + + The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 + El nomespai d'una funció definida per l'usuari en un mòdul de biblioteca ha de ser equivalent al mòdul namespace. En altres paraules, hauria de ser %1 en lloc de %2 + + + A function already exists with the signature %1. + Ja existeix una funció amb la signatura %1. + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + No estan suportades funcions externes. Totes les funcions suportades es poden utilitzar direcctament, sense haver-les de declarar primerament com a externes + + + An argument by name %1 has already been declared. Every argument name must be unique. + Un argument amb el nom %1 ja ha estat declarat. Tots els noms d'arguments han de ser únics. + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + El nom d'una variable lligada a una expressió for ha de ser diferent d'una variableposicional. Per tant, les dues variables anomnades %1 xoquen. + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + La Característica de validació esquemàtica no està suportada. Per tant, les expressions %1 no es poden utilitzar. + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + Cap de les expressions pragma no està suportada. A mes, una expressió fallback ha d'estar present + + + The %1-axis is unsupported in XQuery + L'eix %1 no està suportat a XQuery + + + %1 is not a valid numeric literal. + %1 no és un literal numèric vàlid. + + + No function by name %1 is available. + No hi ha cap funció disponible amb el nom %1. + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + El nomespai URI no pot ser una cadena buida quan estiga vinculat a un prefix, %1. + + + %1 is an invalid namespace URI. + %1 no és un nomespai URI vàlid. + + + It is not possible to bind to the prefix %1 + No és possible la vinculació al prefix %1 + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + El nomespai %1 nomé pot vincular-se a %2 (i està, en qualsevol cas, predeclarat). + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + El prefix %1 nomé pot vincular-se a %2 (i està, en qualsevol cas, predeclarat). + + + Two namespace declaration attributes have the same name: %1. + Dos atributs de declaració nomespai tenen el mateix nom: %1. + + + The namespace URI must be a constant and cannot use enclosed expressions. + El nomespai URI ha de ser una constant i no pot fer servir expressions tancades. + + + An attribute by name %1 has already appeared on this element. + Ja ha aparegut un atribut am el nom%1 en este element. + + + A direct element constructor is not well-formed. %1 is ended with %2. + Un constructor d'element directe no s'ha format correctament. %1 s'ha finalitzat amb %2. + + + The name %1 does not refer to any schema type. + El nom %1 no es refereix a cap tipus d'esquema. + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + %1 és un tipus complexe. La fundició a tipus complexes no és possible. Tot i així, la fundició a tipus atòmics com %2 sí que funciona. + + + %1 is not an atomic type. Casting is only possible to atomic types. + %1 no és un tipus atòmic. La fundició només és possible per a tipus atòmics. + + + %1 is not a valid name for a processing-instruction. Therefore this name test will never match. + %1 no és un nom vàlid per a una instrucció de processat. A més este nom de prova mai coincidirà. + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + %1 no és una declaració d'atribut in-scope. Tingueu en compte que la característica d'importació d'esquemes no està suportada. + + + The name of an extension expression must be in a namespace. + El nom d'una expressió extensió ha d'estar en un nomespai. + + + empty + buit + + + zero or one + cero o u + + + exactly one + exactament u + + + one or more + u o més + + + zero or more + cero o més + + + Required type is %1, but %2 was found. + El tipus requerit és %1, però s'ha trobat %2. + + + Promoting %1 to %2 may cause loss of precision. + Si es promou %1 a %2 es pot produir una pèrdua de precissió. + + + The focus is undefined. + El focus no està definit. + + + It's not possible to add attributes after any other kind of node. + No és possible afegir atributs després de qualsevol tipus de node. + + + An attribute by name %1 has already been created. + Ja s'ha declarat un atribut am el nom %1. + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + Només està suportat l'Unicode Codepoint Collation (%1). %2 no està suportat. + + + + VolumeSlider + + Muted + Silenciat + + + Volume: %1% + Volum: %1% + + + + WebCore::PlatformScrollbar + + Scroll here + Desplaça ací + + + Left edge + Vora esquerra + + + Top + Superior + + + Right edge + Vora dreta + + + Bottom + Inferior + + + Page left + Pàgina esquerra + + + Page up + Pàgina amunt + + + Page right + Pàgina dreta + + + Page down + Pàgina avall + + + Scroll left + Desplaça a l'esquerra + + + Scroll up + Desplaça amunt + + + Scroll right + Desplaça a la dreta + + + Scroll down + Desplaça avall + + + diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp index 67ba2ae82..554452b48 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp @@ -24,6 +24,7 @@ #include "VBoxGlobal.h" #include +#include /* VBOX_VENDOR */ /* Qt includes */ #include @@ -70,7 +71,7 @@ void VBoxAboutDlg::retranslateUi() #endif #if VBOX_OSE mAboutText = aboutText + " " + versionText.arg (mVersion) + "\n" + - QString ("%1 2004-2009 Sun Microsystems, Inc.").arg (QChar (0xa9)); + QString ("%1 2004-" VBOX_C_YEAR " " VBOX_VENDOR).arg (QChar (0xa9)); #else /* VBOX_OSE */ mAboutText = aboutText + "\n" + versionText.arg (mVersion); diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp index 833e73eeb..c182bed88 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.cpp @@ -1346,6 +1346,8 @@ bool VBoxConsoleView::event (QEvent *e) mIgnoreFrameBufferResize = false; } + mMainWnd->onDisplayResize (re->width(), re->height()); + return true; } @@ -2343,7 +2345,14 @@ bool VBoxConsoleView::x11Event (XEvent *event) flags |= KeyPrint; break; case XK_Pause: - flags |= KeyPause; + if (event->xkey.state & ControlMask) /* Break */ + { + ks = XK_Break; + flags |= KeyExtended; + scan = 0x46; + } + else + flags |= KeyPause; break; } @@ -4152,7 +4161,7 @@ void VBoxConsoleView::calculateDesktopGeometry() * screen, this will exclude space taken up by desktop taskbars * and things, but this is unfortunately not true for the more * complex case of a desktop spanning multiple screens. */ - QRect desktop = QApplication::desktop()->availableGeometry (this); + QRect desktop = availableGeometry(); /* The area taken up by the console window on the desktop, * including window frame, title and menu bar and whatnot. */ QRect frame = mMainWnd->frameGeometry(); @@ -4193,6 +4202,13 @@ void VBoxConsoleView::maybeRestrictMinimumSize() } } +QRect VBoxConsoleView::availableGeometry() const +{ + return mMainWnd->isWindowFullScreen() ? + QApplication::desktop()->screenGeometry(this) : + QApplication::desktop()->availableGeometry(this); +} + int VBoxConsoleView::contentsWidth() const { return mFrameBuf->width(); diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.h b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.h index 21e324ec8..16fa5a0ff 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.h +++ b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleView.h @@ -261,6 +261,7 @@ private: void storeConsoleSize (int aWidth, int aHeight); void calculateDesktopGeometry(); void maybeRestrictMinimumSize(); + QRect availableGeometry() const; VBoxConsoleWnd *mMainWnd; diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp index 62d28e5ae..da42b21cc 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp +++ b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.cpp @@ -1229,6 +1229,18 @@ void VBoxConsoleWnd::clearMask() #endif } +void VBoxConsoleWnd::onDisplayResize (ulong aHeight, ulong aWidth) +{ + if (mIsSeamless && QApplication::desktop()->availableGeometry (this).size() != QSize (aHeight, aWidth)) + { + mVmSeamlessAction->setChecked (false); + /* should be cleared already, but just in case */ + if (mIsSeamless) + toggleFullscreenMode (false, true); + } +} + + bool VBoxConsoleWnd::event (QEvent *aEvent) { switch (aEvent->type()) @@ -1447,7 +1459,7 @@ void VBoxConsoleWnd::closeEvent (QCloseEvent *aEvent) if (console.isOk()) { /* Show the power down progress dialog */ - vboxProblem().showModalProgressDialog (progress, machine.GetName(), this, 0); + vboxProblem().showModalProgressDialog (progress, machine.GetName(), this); if (progress.GetResultCode() != 0) vboxProblem().cannotStopMachine (progress); else @@ -2790,6 +2802,16 @@ void VBoxConsoleWnd::unlockActionsSwitch() } mConsole->setMouseCoalescingEnabled (true); #endif + +#ifdef Q_WS_X11 + if (vboxGlobal().isKWinManaged() && !mIsSeamless && !mIsFullscreen) + { + /* Workaround for a KWin bug to let console window to exit + * seamless mode correctly. */ + setWindowFlags(Qt::Window); + setVisible(true); + } +#endif } void VBoxConsoleWnd::mtExitMode() @@ -3493,6 +3515,7 @@ bool VBoxConsoleWnd::toggleFullscreenMode (bool aOn, bool aSeamless) if (wasHidden) hide(); #endif + return true; } diff --git a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.h b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.h index 2f3b7553e..bb5556765 100644 --- a/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.h +++ b/src/VBox/Frontends/VirtualBox/src/VBoxConsoleWnd.h @@ -111,6 +111,9 @@ public: void setMask (const QRegion &aRegion); void clearMask(); + /* informs that the guest display is resized */ + void onDisplayResize (ulong aHeight, ulong aWidth); + signals: void closing(); diff --git a/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.cpp b/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.cpp index 4281bee1d..97123a498 100644 --- a/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.cpp +++ b/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.cpp @@ -23,10 +23,12 @@ #include "VBoxX11Helper.h" #include +#include #include /* rhel3 build hack */ RT_C_DECLS_BEGIN +#include #include #include RT_C_DECLS_END @@ -83,3 +85,48 @@ void X11ScreenSaverSettingsRestore() if (gX11DpmsState && gX11ScreenSaverDpmsAvailable) DPMSEnable(display); } + +/** + * Determine if the current Window manager is KWin (KDE) + */ +bool X11IsWindowManagerKWin() +{ + Atom typeReturned; + Atom utf8Atom; + int formatReturned; + unsigned long ulNitemsReturned; + unsigned long ulDummy; + unsigned char *pcData = NULL; + bool fIsKWinManaged = false; + Display *display = QX11Info::display(); + Atom propNameAtom; + Window WMWindow = None; + + propNameAtom = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", True); + if (XGetWindowProperty(display, QX11Info::appRootWindow(), propNameAtom, + 0, 512, False, XA_WINDOW, &typeReturned, + &formatReturned, &ulNitemsReturned, &ulDummy, &pcData) + == Success) + { + + if (typeReturned == XA_WINDOW && formatReturned == 32) + WMWindow = *((Window*) pcData); + if (pcData) + XFree(pcData); + if (WMWindow != None) + { + propNameAtom = XInternAtom(display, "_NET_WM_NAME", True); + utf8Atom = XInternAtom(display, "UTF8_STRING", True); + if (XGetWindowProperty(QX11Info::display(), WMWindow, propNameAtom, + 0, 512, False, utf8Atom, &typeReturned, + &formatReturned, &ulNitemsReturned, &ulDummy, &pcData) + == Success) + { + fIsKWinManaged = RTStrCmp((const char*)pcData, "KWin") == 0; + if (pcData) + XFree(pcData); + } + } + } + return fIsKWinManaged; +} diff --git a/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.h b/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.h index 8e597cf35..b98ba50a2 100644 --- a/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.h +++ b/src/VBox/Frontends/VirtualBox/src/X11/VBoxX11Helper.h @@ -26,5 +26,6 @@ void X11ScreenSaverSettingsInit(); void X11ScreenSaverSettingsSave(); void X11ScreenSaverSettingsRestore(); +bool X11IsWindowManagerKWin(); #endif diff --git a/src/VBox/Frontends/VirtualBox/src/darwin/Info.plist b/src/VBox/Frontends/VirtualBox/src/darwin/Info.plist index d32e42085..52dc7bcbc 100644 --- a/src/VBox/Frontends/VirtualBox/src/darwin/Info.plist +++ b/src/VBox/Frontends/VirtualBox/src/darwin/Info.plist @@ -10,7 +10,7 @@ CFBundleExecutable VirtualBox CFBundleVersion @VBOX_VERSION_MAJOR@.@VBOX_VERSION_MINOR@.@VBOX_VERSION_BUILD@ CFBundleShortVersionString @VBOX_VERSION_MAJOR@.@VBOX_VERSION_MINOR@.@VBOX_VERSION_BUILD@ - CFBundleGetInfoString VirtualBox @VBOX_VERSION_STRING@, © 2007-2008 Sun Microsystems, Inc. + CFBundleGetInfoString VirtualBox @VBOX_VERSION_STRING@, © 2007-@VBOX_C_YEAR@ @VBOX_VENDOR@ CFBundleIconFile virtualbox CFBundleInfoDictionaryVersion 6.0 LSCanProvideIMVideoDataSource diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp index 128d69658..7ddf57b27 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp @@ -22,6 +22,7 @@ #include "VBoxGlobal.h" #include +#include #include "VBoxDefs.h" #include "VBoxSelectorWnd.h" @@ -61,13 +62,13 @@ #include #ifdef Q_WS_X11 -#ifndef VBOX_OSE -# include "VBoxLicenseViewer.h" -#endif /* VBOX_OSE */ - -#include -#include -#include +# ifndef VBOX_OSE +# include "VBoxLicenseViewer.h" +# endif /* VBOX_OSE */ +# include +# include +# include +# include "VBoxX11Helper.h" #endif #ifdef Q_WS_MAC @@ -588,6 +589,7 @@ VBoxGlobal::VBoxGlobal() , mIncreasedWindowCounter (false) #endif , mMediaEnumThread (NULL) + , mIsKWinManaged (false) , mVerString ("1.0") { } @@ -2653,7 +2655,7 @@ QString VBoxGlobal::languageCountryEnglish() const */ QString VBoxGlobal::languageTranslators() const { - return qApp->translate ("@@@", "Sun Microsystems, Inc.", + return qApp->translate ("@@@", VBOX_VENDOR, "Comma-separated list of translators"); } @@ -4788,6 +4790,10 @@ void VBoxGlobal::init() vm_render_mode_str = RTStrDup (virtualBox() .GetExtraData (VBoxDefs::GUI_RenderMode).toAscii().constData()); +#ifdef Q_WS_X11 + mIsKWinManaged = X11IsWindowManagerKWin(); +#endif + #ifdef VBOX_WITH_DEBUGGER_GUI # ifdef VBOX_WITH_DEBUGGER_GUI_MENU mDbgEnabled = true; diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h index b6d4da3ad..667224380 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h @@ -323,6 +323,7 @@ public: VBoxDefs::RenderMode vmRenderMode() const { return vm_render_mode; } const char *vmRenderModeStr() const { return vm_render_mode_str; } + bool isKWinManaged() const { return mIsKWinManaged; } #ifdef VBOX_WITH_DEBUGGER_GUI bool isDebuggerEnabled() const { return mDbgEnabled; } @@ -917,6 +918,7 @@ private: VBoxDefs::RenderMode vm_render_mode; const char * vm_render_mode_str; + bool mIsKWinManaged; #ifdef VBOX_WITH_DEBUGGER_GUI /** Whether the debugger should be accessible or not. diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp index 7109b23a5..3c5ca5ebf 100644 --- a/src/VBox/Frontends/VirtualBox/src/main.cpp +++ b/src/VBox/Frontends/VirtualBox/src/main.cpp @@ -55,6 +55,7 @@ #include #include #include +#include #ifdef VBOX_WITH_HARDENING # include #endif @@ -249,8 +250,8 @@ static void showHelp() dflt = "image"; #endif - RTPrintf("Sun VirtualBox Graphical User Interface %s\n" - "(C) 2005-2009 Sun Microsystems, Inc.\n" + RTPrintf(VBOX_PRODUCT " Graphical User Interface %s\n" + "(C) 2005-2010 " VBOX_VENDOR "\n" "All rights reserved.\n" "\n" "Usage:\n" diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/VBoxGLSettingsLanguage.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/VBoxGLSettingsLanguage.cpp index 535209c06..17e873ce8 100644 --- a/src/VBox/Frontends/VirtualBox/src/settings/global/VBoxGLSettingsLanguage.cpp +++ b/src/VBox/Frontends/VirtualBox/src/settings/global/VBoxGLSettingsLanguage.cpp @@ -32,6 +32,7 @@ #include #include #include +#include extern const char *gVBoxLangSubDir; extern const char *gVBoxLangFileBase; @@ -69,7 +70,7 @@ public: "(empty if native country name is empty)"); QString translatorsName = tratra (aTranslator, - "@@@", "Sun Microsystems, Inc.", "Comma-separated list of translators"); + "@@@", VBOX_VENDOR, "Comma-separated list of translators"); QString itemName = nativeLanguage; QString langName = englishLanguage; diff --git a/src/VBox/GuestHost/OpenGL/Makefile.kmk b/src/VBox/GuestHost/OpenGL/Makefile.kmk index e5bee0561..459c4c66b 100644 --- a/src/VBox/GuestHost/OpenGL/Makefile.kmk +++ b/src/VBox/GuestHost/OpenGL/Makefile.kmk @@ -46,6 +46,10 @@ endif VBoxOGLcrutil_TEMPLATE = VBOXCROGLR3GUESTDLL VBoxOGLcrutil_SDKS.win = DXSDK VBoxOGLcrutil_INTERMEDIATES = $(VBOX_PATH_CROGL_GENFILES)/cr_opcodes.h +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLcrutil_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLcrutil_SOURCES = \ util/bbox.c \ util/bufpool.c \ @@ -119,6 +123,10 @@ $(VBOX_PATH_CROGL_GENFILES)/debug_opcodes.c: $(PATH_SUB_CURRENT)/util/debug_opco VBoxOGLcrpacker_TEMPLATE = VBOXCROGLR3GUESTLIB VBoxOGLcrpacker_INCS = \ packer +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLcrpacker_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLcrpacker_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/cr_packfunctions.h \ $(VBOX_PATH_CROGL_GENFILES)/cr_opcodes.h \ @@ -249,6 +257,10 @@ $(VBOX_PATH_CROGL_GENFILES)/%_swap.c: $(PATH_SUB_CURRENT)/packer/%.c $(PATH_SUB_ VBoxOGLspuload_TEMPLATE = VBOXCROGLR3GUESTLIB VBoxOGLspuload_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLspuload_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLspuload_SOURCES = \ spu_loader/spuinit.c \ spu_loader/spuload.c \ @@ -300,6 +312,10 @@ $(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h: $(PATH_SUB_CURRENT)/spu_loader VBoxOGLcrstate_TEMPLATE = VBOXCROGLR3GUESTLIB VBoxOGLcrstate_INCS = \ state_tracker +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLcrstate_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLcrstate_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/state/cr_statefuncs.h \ $(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h \ @@ -463,6 +479,10 @@ $(VBOX_PATH_CROGL_GENFILES)/state/cr_statefuncs.h: $(addprefix $(PATH_SUB_CURREN VBoxOGLerrorspu_TEMPLATE = VBOXCROGLR3GUESTDLL VBoxOGLerrorspu_INTERMEDIATES = \ $(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h +if1of ($(KBUILD_TARGET),linux solaris) + VBoxOGLerrorspu_INCS += \ + $(VBOX_MESA_INCS) +endif VBoxOGLerrorspu_SOURCES = \ $(VBOX_PATH_CROGL_GENFILES)/errorspu.c \ error/errorspu_init.c diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_client.c b/src/VBox/GuestHost/OpenGL/packer/pack_client.c index b1f29565d..e91c2d5a6 100644 --- a/src/VBox/GuestHost/OpenGL/packer/pack_client.c +++ b/src/VBox/GuestHost/OpenGL/packer/pack_client.c @@ -1034,7 +1034,7 @@ static void crPackLockClientPointer(GLint first, GLint count, unsigned char **pp } WRITE_DATA_AI(int, index); - cptr = cp->p + first*cp->bytesPerIndex; + cptr = cp->p + first*cp->stride; if (cp->bytesPerIndex==cp->stride) { crMemcpy(data_ptr, cptr, count*cp->bytesPerIndex); diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c index 419f134e7..2a0f9ca25 100644 --- a/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c +++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_glsl.c @@ -984,7 +984,7 @@ static void crStateGLSLSyncShadersCB(unsigned long key, void *data1, void *data2 if (pShader->source) { - diff_api.ShaderSource(pShader->hwid, 1, &pShader->source, NULL); + diff_api.ShaderSource(pShader->hwid, 1, (const char**)&pShader->source, NULL); if (pShader->compiled) diff_api.CompileShader(pShader->hwid); crFree(pShader->source); @@ -1003,7 +1003,7 @@ static void crStateAttachShaderCB(unsigned long key, void *data1, void *data2) if (pShader->source) { - diff_api.ShaderSource(pShader->hwid, 1, &pShader->source, NULL); + diff_api.ShaderSource(pShader->hwid, 1, (const char**)&pShader->source, NULL); if (pShader->compiled) diff_api.CompileShader(pShader->hwid); } diff --git a/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c b/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c index e4de1ecfb..71e270ac1 100644 --- a/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c +++ b/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c @@ -46,6 +46,9 @@ crStateAllocShared(void) static void DeleteTextureCallback(void *texObj) { +#ifndef IN_GUEST + diff_api.DeleteTextures(1, &((CRTextureObj *)texObj)->name); +#endif crStateDeleteTextureObject((CRTextureObj *) texObj); } diff --git a/src/VBox/HostDrivers/Support/SUPDrvInternal.h b/src/VBox/HostDrivers/Support/SUPDrvInternal.h index be6d5195a..516b2f9da 100644 --- a/src/VBox/HostDrivers/Support/SUPDrvInternal.h +++ b/src/VBox/HostDrivers/Support/SUPDrvInternal.h @@ -1,4 +1,4 @@ -/* $Revision: 53446 $ */ +/* $Revision: 56351 $ */ /** @file * VirtualBox Support Driver - Internal header. */ @@ -80,7 +80,9 @@ RT_C_DECLS_END #elif defined(RT_OS_LINUX) -# include +# ifndef AUTOCONF_INCLUDED +# include +# endif # include # if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) # define MODVERSIONS diff --git a/src/VBox/HostDrivers/Support/SUPLibInternal.h b/src/VBox/HostDrivers/Support/SUPLibInternal.h index 7a79a0c67..db7ca7f5a 100644 --- a/src/VBox/HostDrivers/Support/SUPLibInternal.h +++ b/src/VBox/HostDrivers/Support/SUPLibInternal.h @@ -51,6 +51,11 @@ # define SUPLIB_DLL_SUFF ".so" #endif +#ifdef RT_OS_SOLARIS +/** Number of dummy files to open (2:ip4, 1:ip6, 1:extra) see #4650 */ +#define SUPLIB_FLT_DUMMYFILES 4 +#endif + /** @def SUPLIB_EXE_SUFF * The (typical) executable suffix. */ #if defined(RT_OS_OS2) || defined(RT_OS_WINDOWS) @@ -187,6 +192,9 @@ typedef struct SUPLIBDATA #elif defined(RT_OS_LINUX) /** Indicates whether madvise(,,MADV_DONTFORK) works. */ bool fSysMadviseWorks; +#elif defined(RT_OS_SOLARIS) + /** Extra dummy file descriptors to prevent growing file-descriptor table on clean up (see #4650) */ + int hDummy[SUPLIB_FLT_DUMMYFILES]; #elif defined(RT_OS_WINDOWS) #endif } SUPLIBDATA; diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp index 094e6b577..901d64ab7 100644 --- a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp +++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp @@ -66,6 +66,9 @@ # ifndef CAP_TO_MASK # define CAP_TO_MASK(cap) RT_BIT(cap) # endif +# elif defined(RT_OS_FREEBSD) +# include +# include # elif defined(RT_OS_SOLARIS) # include # endif @@ -137,6 +140,7 @@ static uint32_t g_uCaps; # endif #endif + /******************************************************************************* * Internal Functions * *******************************************************************************/ @@ -320,12 +324,25 @@ static void supR3HardenedGetFullExePath(void) #if defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) || defined(RT_OS_SOLARIS) # ifdef RT_OS_LINUX int cchLink = readlink("/proc/self/exe", &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1); + # elif defined(RT_OS_SOLARIS) char szFileBuf[PATH_MAX + 1]; sprintf(szFileBuf, "/proc/%ld/path/a.out", (long)getpid()); int cchLink = readlink(szFileBuf, &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1); -# else /* RT_OS_FREEBSD: */ - int cchLink = readlink("/proc/curproc/file", &g_szSupLibHardenedExePath[0], sizeof(g_szSupLibHardenedExePath) - 1); + +# else /* RT_OS_FREEBSD */ + int aiName[4]; + aiName[0] = CTL_KERN; + aiName[1] = KERN_PROC; + aiName[2] = KERN_PROC_PATHNAME; + aiName[3] = getpid(); + + size_t cbPath = sizeof(g_szSupLibHardenedExePath); + if (sysctl(aiName, RT_ELEMENTS(aiName), g_szSupLibHardenedExePath, &cbPath, NULL, 0) < 0) + supR3HardenedFatal("supR3HardenedExecDir: sysctl failed\n"); + g_szSupLibHardenedExePath[sizeof(g_szSupLibHardenedExePath) - 1] = '\0'; + int cchLink = strlen(g_szSupLibHardenedExePath); /* paranoid? can't we use cbPath? */ + # endif if (cchLink < 0 || cchLink == sizeof(g_szSupLibHardenedExePath) - 1) supR3HardenedFatal("supR3HardenedExecDir: couldn't read \"%s\", errno=%d cchLink=%d\n", diff --git a/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp b/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp index 4e18d1821..a0baa04e2 100644 --- a/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp +++ b/src/VBox/HostDrivers/Support/solaris/SUPLib-solaris.cpp @@ -81,6 +81,26 @@ int suplibOsInit(PSUPLIBDATA pThis, bool fPreInited) if (fPreInited) return VINF_SUCCESS; + /* + * Open dummy files to preallocate file descriptors, see #4650. + */ + for (int i = 0; i < SUPLIB_FLT_DUMMYFILES; i++) + { + pThis->hDummy[i] = -1; + int hDummy = open("/dev/null", O_RDWR, 0); + if (hDummy >= 0) + { + if (fcntl(hDummy, F_SETFD, FD_CLOEXEC) == 0) + pThis->hDummy[i] = hDummy; + else + { + close(hDummy); + LogRel(("Failed to set close on exec [%d] /dev/null! errno=%d\n", i, errno)); + } + } + else + LogRel(("Failed to open[%d] /dev/null! errno=%d\n", i, errno)); + } /* * Try to open the device. @@ -126,6 +146,18 @@ int suplibOsInit(PSUPLIBDATA pThis, bool fPreInited) int suplibOsTerm(PSUPLIBDATA pThis) { + /* + * Close the dummy files first. + */ + for (int i = 0; i < SUPLIB_FLT_DUMMYFILES; i++) + { + if (pThis->hDummy[i] != -1) + { + close(pThis->hDummy[i]); + pThis->hDummy[i] = -1; + } + } + /* * Check if we're initialized */ diff --git a/src/VBox/HostDrivers/Support/win/VBoxDrv.inf b/src/VBox/HostDrivers/Support/win/VBoxDrv.inf index 0702d4cd7..54a55762f 100644 --- a/src/VBox/HostDrivers/Support/win/VBoxDrv.inf +++ b/src/VBox/HostDrivers/Support/win/VBoxDrv.inf @@ -4,29 +4,29 @@ ; ; -; Copyright (C) 2006-2007 Sun Microsystems, Inc. -; -; 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. -; -; Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa -; Clara, CA 95054 USA or visit http://www.sun.com if you need -; additional information or have any questions. -; +; Copyright (C) 2006-2007 Sun Microsystems, Inc. +; +; 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. +; +; Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa +; Clara, CA 95054 USA or visit http://www.sun.com if you need +; additional information or have any questions. +; [Version] Signature="$Windows NT$" diff --git a/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf b/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf index 070a3704f..df8b3a090 100644 --- a/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf +++ b/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf @@ -22,5 +22,5 @@ # subdirectory (32-bit drivers goes into the same # directory). # -name="vboxnet" parent="pseudo"; +name="vboxnet" parent="pseudo" instance=0; diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp index 8f6b13fd6..ac4a1d34e 100644 --- a/src/VBox/HostServices/SharedFolders/vbsf.cpp +++ b/src/VBox/HostServices/SharedFolders/vbsf.cpp @@ -261,7 +261,6 @@ static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, PSHFLSTRIN if (BIT_FLAG(pClient->fu32Flags, SHFL_CF_UTF8)) { - int rc; char *utf8Root; /* Verify that the path is under the root directory. */ @@ -497,7 +496,7 @@ static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, PSHFLSTRIN } /** @todo don't check when creating files or directories; waste of time */ - rc = RTPathQueryInfo(pszFullPath, &info, RTFSOBJATTRADD_NOTHING); + rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK); if (rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND) { uint32_t len = (uint32_t)strlen(pszFullPath); @@ -511,7 +510,7 @@ static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, PSHFLSTRIN if (*src == RTPATH_DELIMITER) { *src = 0; - rc = RTPathQueryInfo (pszFullPath, &info, RTFSOBJATTRADD_NOTHING); + rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK); *src = RTPATH_DELIMITER; if (rc == VINF_SUCCESS) { @@ -547,7 +546,7 @@ static int vbsfBuildFullPath (SHFLCLIENTDATA *pClient, SHFLROOT root, PSHFLSTRIN { fEndOfString = false; *end = 0; - rc = RTPathQueryInfo(src, &info, RTFSOBJATTRADD_NOTHING); + rc = RTPathQueryInfoEx(src, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK); Assert(rc == VINF_SUCCESS || rc == VERR_FILE_NOT_FOUND || rc == VERR_PATH_NOT_FOUND); } else @@ -887,7 +886,7 @@ static int vbsfOpenFile (const char *pszPath, SHFLCREATEPARMS *pParms) RTFSOBJINFO info; /** @todo Possible race left here. */ - if (RT_SUCCESS(RTPathQueryInfo (pszPath, &info, RTFSOBJATTRADD_NOTHING))) + if (RT_SUCCESS(RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK))) { #ifdef RT_OS_WINDOWS info.Attr.fMode |= 0111; @@ -1160,7 +1159,7 @@ static int vbsfLookupFile(char *pszPath, SHFLCREATEPARMS *pParms) RTFSOBJINFO info; int rc; - rc = RTPathQueryInfo (pszPath, &info, RTFSOBJATTRADD_NOTHING); + rc = RTPathQueryInfoEx(pszPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK); LogFlow(("SHFL_CF_LOOKUP\n")); /* Client just wants to know if the object exists. */ switch (rc) @@ -1252,8 +1251,8 @@ int vbsfCreate (SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLSTRING *pPath, uint3 /* Query path information. */ RTFSOBJINFO info; - rc = RTPathQueryInfo (pszFullPath, &info, RTFSOBJATTRADD_NOTHING); - LogFlow(("RTPathQueryInfo returned %Rrc\n", rc)); + rc = RTPathQueryInfoEx(pszFullPath, &info, RTFSOBJATTRADD_NOTHING, RTPATH_F_FOLLOW_LINK); + LogFlow(("RTPathQueryInfoEx returned %Rrc\n", rc)); if (RT_SUCCESS(rc)) { diff --git a/src/VBox/HostServices/SharedOpenGL/Makefile.kmk b/src/VBox/HostServices/SharedOpenGL/Makefile.kmk index e5a8b9543..c4c8f62c6 100644 --- a/src/VBox/HostServices/SharedOpenGL/Makefile.kmk +++ b/src/VBox/HostServices/SharedOpenGL/Makefile.kmk @@ -26,10 +26,12 @@ include $(KBUILD_PATH)/subheader.kmk # # Target lists. # +ifdef VBOX_WITH_MAIN DLLS += VBoxSharedCrOpenGL VBoxOGLrenderspu LIBRARIES += VBoxOGLcrserverlib VBoxOGLcrunpacker BLDDIRS += \ $(VBOX_PATH_CROGL_GENFILES)/ +endif ifeq ($(KBUILD_TARGET),darwin) # diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c index 2c2bb58c6..a73b59129 100644 --- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c +++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c @@ -22,6 +22,9 @@ #include #include "renderspu.h" +#include +#include +#include GLboolean renderspu_SystemInitVisual(VisualInfo *pVisInfo) { @@ -66,6 +69,13 @@ GLboolean renderspu_SystemVBoxCreateWindow(VisualInfo *pVisInfo, GLboolean fShow CRASSERT(pVisInfo); CRASSERT(pWinInfo); + /* VirtualBox is the only frontend which support 3D right now. */ + char pszName[256]; + if (RTProcGetExecutableName(pszName, sizeof(pszName))) + /* Check for VirtualBox and VirtualBoxVM */ + if (RTStrNICmp(RTPathFilename(pszName), "VirtualBox", 10) != 0) + return GL_FALSE; + pWinInfo->visual = pVisInfo; pWinInfo->window = NULL; pWinInfo->nativeWindow = NULL; diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c index 7226cca79..4a7f070c5 100644 --- a/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c +++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c @@ -25,7 +25,7 @@ SPUFunctions render_functions = { }; RenderSPU render_spu; -uint64_t render_spu_parent_window_id; +uint64_t render_spu_parent_window_id = 0; #ifdef CHROMIUM_THREADSAFE CRtsd _RenderTSD; diff --git a/src/VBox/Installer/linux/Makefile.kmk b/src/VBox/Installer/linux/Makefile.kmk index 6b17d9b2d..060bcd35b 100644 --- a/src/VBox/Installer/linux/Makefile.kmk +++ b/src/VBox/Installer/linux/Makefile.kmk @@ -189,9 +189,9 @@ ifdef VBOX_WITH_VRDP VBOX_LNX_STRIP_BIN += \ VBoxVRDP.so \ VRDPAuth.so - VBOX_LNX_NO_STRIP += \ - rdesktop-vrdp.tar.gz ifdef VBOX_WITH_VRDP_RDESKTOP + VBOX_LNX_NO_STRIP += \ + rdesktop-vrdp.tar.gz VBOX_LNX_NO_STRIP += \ rdesktop-vrdp-keymaps VBOX_LNX_STRIP_BIN += \ diff --git a/src/VBox/Installer/linux/vboxdrv.sh.in b/src/VBox/Installer/linux/vboxdrv.sh.in index 40070a7b4..60ed46465 100755 --- a/src/VBox/Installer/linux/vboxdrv.sh.in +++ b/src/VBox/Installer/linux/vboxdrv.sh.in @@ -36,6 +36,11 @@ GROUPNAME=vboxusers LOG="/var/log/vbox-install.log" NOLSB=%NOLSB% DEBIAN=%DEBIAN% +MODPROBE=/sbin/modprobe + +if $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then + MODPROBE="$MODPROBE --allow-unsupported-modules" +fi [ -f /lib/lsb/init-functions ] || NOLSB=yes [ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg @@ -166,7 +171,7 @@ start() if [ -e /proc/sys/kernel/perf_counter_paranoid ]; then echo 2 > /proc/sys/kernel/perf_counter_paranoid fi - if ! modprobe vboxdrv > /dev/null 2>&1; then + if ! $MODPROBE vboxdrv > /dev/null 2>&1; then failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why" fi sleep .2 @@ -198,10 +203,10 @@ start() rmmod vboxdrv 2>/dev/null failure "Cannot change owner $GROUPNAME for device $DEVICE" fi - if ! modprobe vboxnetflt > /dev/null 2>&1; then + if ! $MODPROBE vboxnetflt > /dev/null 2>&1; then failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why" fi - if ! modprobe vboxnetadp > /dev/null 2>&1; then + if ! $MODPROBE vboxnetadp > /dev/null 2>&1; then failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why" fi succ_msg diff --git a/src/VBox/Installer/solaris/preremove.sh b/src/VBox/Installer/solaris/preremove.sh index cae11d30c..868cf60e1 100755 --- a/src/VBox/Installer/solaris/preremove.sh +++ b/src/VBox/Installer/solaris/preremove.sh @@ -19,7 +19,7 @@ currentzone=`zonename` if test "$currentzone" = "global"; then - echo "Removing VirtualBox drivers and services..." + echo "Removing VirtualBox services and drivers..." /opt/VirtualBox/vboxconfig.sh --preremove if test "$?" -eq 0; then echo "Done." diff --git a/src/VBox/Installer/solaris/vboxconfig.sh b/src/VBox/Installer/solaris/vboxconfig.sh index c0089ccfd..dc9ca94ea 100755 --- a/src/VBox/Installer/solaris/vboxconfig.sh +++ b/src/VBox/Installer/solaris/vboxconfig.sh @@ -42,6 +42,7 @@ BIN_BOOTADM=/sbin/bootadm BIN_SVCADM=/usr/sbin/svcadm BIN_SVCCFG=/usr/sbin/svccfg BIN_IFCONFIG=/sbin/ifconfig +BIN_ID=/usr/bin/id # "vboxdrv" is also used in sed lines here (change those as well if it ever changes) MOD_VBOXDRV=vboxdrv @@ -120,7 +121,9 @@ find_bins() # Search only for binaries that might be in different locations BIN_IFCONFIG=`which ifconfig 2> /dev/null` BIN_SVCS=`which svcs 2> /dev/null` + BIN_ID=`which id 2> /dev/null` + check_bin_path "$BIN_ID" check_bin_path "$BIN_ADDDRV" check_bin_path "$BIN_REMDRV" check_bin_path "$BIN_MODLOAD" @@ -138,18 +141,10 @@ find_bins() # !! failure is always fatal check_root() { - idbin=/usr/xpg4/bin/id - if test ! -x "$idbin"; then - found=`which id 2> /dev/null` - if test ! -x "$found"; then - errorprint "Failed to find a suitable user id executable." - exit 1 - else - idbin=$found - fi - fi - - if test `$idbin -u` -ne 0; then + # Don't use "-u" option as some id binaries don't support it, instead + # rely on "uid=101(username) gid=10(groupname) groups=10(staff)" output + curuid=`$BIN_ID | cut -f 2 -d '=' | cut -f 1 -d '('` + if test "$curuid" -ne 0; then errorprint "This script must be run with administrator privileges." exit 1 fi @@ -197,7 +192,9 @@ module_added() exit 1 fi - loadentry=`cat /etc/name_to_major | grep $1` + # Add a space at end of module name to make sure we have a perfect match to avoid + # any substring matches: e.g "vboxusb" & "vboxusbmon" + loadentry=`cat /etc/name_to_major | grep "$1 "` if test -z "$loadentry"; then return 1 fi @@ -214,8 +211,8 @@ module_loaded() fi modname=$1 - # modinfo should now work properly since we prevent module autounloading - loadentry=`$BIN_MODINFO | grep $modname` + # modinfo should now work properly since we prevent module autounloading. + loadentry=`$BIN_MODINFO | grep "$modname "` if test -z "$loadentry"; then return 1 fi @@ -305,13 +302,13 @@ unload_module() modname=$1 moddesc=$2 fatal=$3 - modid=`$BIN_MODINFO | grep $modname | cut -f 1 -d ' ' ` + modid=`$BIN_MODINFO | grep "$modname " | cut -f 1 -d ' ' ` if test -n "$modid"; then $BIN_MODUNLOAD -i $modid if test $? -eq 0; then subprint "Unloaded: $moddesc module" else - subprint "Unloading: $moddesc ...FAILED!" + subprint "Unloading: $moddesc module ...FAILED!" if test "$fatal" = "$FATALOP"; then exit 1 fi diff --git a/src/VBox/Main/ApplianceImpl.cpp b/src/VBox/Main/ApplianceImpl.cpp index c6b06a49d..3effb154b 100644 --- a/src/VBox/Main/ApplianceImpl.cpp +++ b/src/VBox/Main/ApplianceImpl.cpp @@ -67,17 +67,17 @@ struct Appliance::LocationInfo // opaque private instance data of Appliance class struct Appliance::Data { - Data() - : pReader(NULL) {} + Data() + : pReader(NULL) {} - ~Data() - { - if (pReader) - { - delete pReader; - pReader = NULL; - } - } + ~Data() + { + if (pReader) + { + delete pReader; + pReader = NULL; + } + } LocationInfo locInfo; /* The location info for the currently processed OVF */ @@ -756,7 +756,7 @@ struct Appliance::TaskExportOVF: Appliance::TaskOVF struct MyHardDiskAttachment { - Guid uuid; + Bstr bstrUuid; ComPtr pMachine; Bstr controllerType; int32_t lChannel; @@ -945,6 +945,10 @@ int Appliance::readFS(TaskImportOVF *pTask) rc = setError(VBOX_E_FILE_ERROR, x.what()); } + catch(HRESULT aRC) + { + rc = aRC; + } pTask->rc = rc; @@ -1097,7 +1101,7 @@ int Appliance::importFS(TaskImportOVF *pTask) // a list of images that we created/imported list llHardDiskAttachments; list< ComPtr > llHardDisksCreated; - list llMachinesRegistered; + list llMachinesRegistered; // list of string UUIDs ComPtr session; bool fSessionOpen = false; @@ -1108,7 +1112,7 @@ int Appliance::importFS(TaskImportOVF *pTask) // this is safe to access because this thread only gets started // if pReader != NULL - /* If an manifest file exists, verify the content. Therefor we need all + /* If an manifest file exists, verify the content. Therefore we need all * files which are referenced by the OVF & the OVF itself */ Utf8Str strMfFile = manifestFileName(pTask->locInfo.strPath); list filesList; @@ -1506,13 +1510,12 @@ int Appliance::importFS(TaskImportOVF *pTask) rc = mVirtualBox->RegisterMachine(pNewMachine); if (FAILED(rc)) throw rc; - Bstr newMachineId_; - rc = pNewMachine->COMGETTER(Id)(newMachineId_.asOutParam()); + Bstr bstrNewMachineId; + rc = pNewMachine->COMGETTER(Id)(bstrNewMachineId.asOutParam()); if (FAILED(rc)) throw rc; - Guid newMachineId(newMachineId_); // store new machine for roll-back in case of errors - llMachinesRegistered.push_back(newMachineId); + llMachinesRegistered.push_back(bstrNewMachineId); // Add floppies and CD-ROMs to the appropriate controllers. std::list vsdeFloppy = vsdescThis->findByType(VirtualSystemDescriptionType_Floppy); @@ -1531,7 +1534,7 @@ int Appliance::importFS(TaskImportOVF *pTask) { /* In order to attach things we need to open a session * for the new machine */ - rc = mVirtualBox->OpenSession(session, newMachineId_); + rc = mVirtualBox->OpenSession(session, bstrNewMachineId); if (FAILED(rc)) throw rc; fSessionOpen = true; @@ -1552,7 +1555,7 @@ int Appliance::importFS(TaskImportOVF *pTask) // this is for rollback later MyHardDiskAttachment mhda; - mhda.uuid = newMachineId; + mhda.bstrUuid = bstrNewMachineId; mhda.pMachine = pNewMachine; mhda.controllerType = bstrName; mhda.lChannel = 0; @@ -1598,7 +1601,7 @@ int Appliance::importFS(TaskImportOVF *pTask) // this is for rollback later MyHardDiskAttachment mhda; - mhda.uuid = newMachineId; + mhda.bstrUuid = bstrNewMachineId; mhda.pMachine = pNewMachine; ConvertDiskAttachmentValues(*pController, @@ -1649,7 +1652,7 @@ int Appliance::importFS(TaskImportOVF *pTask) { /* In order to attach hard disks we need to open a session * for the new machine */ - rc = mVirtualBox->OpenSession(session, newMachineId_); + rc = mVirtualBox->OpenSession(session, bstrNewMachineId); if (FAILED(rc)) throw rc; fSessionOpen = true; @@ -1785,7 +1788,7 @@ int Appliance::importFS(TaskImportOVF *pTask) // this is for rollback later MyHardDiskAttachment mhda; - mhda.uuid = newMachineId; + mhda.bstrUuid = bstrNewMachineId; mhda.pMachine = pNewMachine; ConvertDiskAttachmentValues(hdc, @@ -1850,7 +1853,8 @@ int Appliance::importFS(TaskImportOVF *pTask) ++itM) { const MyHardDiskAttachment &mhda = *itM; - rc2 = mVirtualBox->OpenSession(session, Bstr(mhda.uuid)); + Bstr bstrUuid(mhda.bstrUuid); // make a copy, Windows can't handle const Bstr + rc2 = mVirtualBox->OpenSession(session, bstrUuid); if (SUCCEEDED(rc2)) { ComPtr sMachine; @@ -1877,14 +1881,14 @@ int Appliance::importFS(TaskImportOVF *pTask) } // finally, deregister and remove all machines - list::iterator itID; + list::iterator itID; for (itID = llMachinesRegistered.begin(); itID != llMachinesRegistered.end(); ++itID) { - const Guid &guid = *itID; + Bstr bstrGuid = *itID; // make a copy, Windows can't handle const Bstr ComPtr failedMachine; - rc2 = mVirtualBox->UnregisterMachine(guid.toUtf16(), failedMachine.asOutParam()); + rc2 = mVirtualBox->UnregisterMachine(bstrGuid, failedMachine.asOutParam()); if (SUCCEEDED(rc2)) rc2 = failedMachine->DeleteSettings(); } diff --git a/src/VBox/Main/ConsoleImpl.cpp b/src/VBox/Main/ConsoleImpl.cpp index c334ca472..b521d8527 100644 --- a/src/VBox/Main/ConsoleImpl.cpp +++ b/src/VBox/Main/ConsoleImpl.cpp @@ -286,14 +286,14 @@ HRESULT Console::FinalConstruct() { LogFlowThisFunc(("\n")); - memset(mapFDLeds, 0, sizeof(mapFDLeds)); - memset(mapIDELeds, 0, sizeof(mapIDELeds)); - memset(mapSATALeds, 0, sizeof(mapSATALeds)); - memset(mapSCSILeds, 0, sizeof(mapSCSILeds)); + memset(mapStorageLeds, 0, sizeof(mapStorageLeds)); memset(mapNetworkLeds, 0, sizeof(mapNetworkLeds)); memset(&mapUSBLed, 0, sizeof(mapUSBLed)); memset(&mapSharedFolderLed, 0, sizeof(mapSharedFolderLed)); + for (unsigned i = 0; i < RT_ELEMENTS(maStorageDevType); ++ i) + maStorageDevType[i] = DeviceType_Null; + return S_OK; } @@ -2175,27 +2175,12 @@ STDMETHODIMP Console::GetDeviceActivity(DeviceType_T aDeviceType, switch (aDeviceType) { case DeviceType_Floppy: - { - for (unsigned i = 0; i < RT_ELEMENTS(mapFDLeds); ++i) - SumLed.u32 |= readAndClearLed(mapFDLeds[i]); - break; - } - case DeviceType_DVD: - { - SumLed.u32 |= readAndClearLed(mapIDELeds[2]); - break; - } - case DeviceType_HardDisk: { - SumLed.u32 |= readAndClearLed(mapIDELeds[0]); - SumLed.u32 |= readAndClearLed(mapIDELeds[1]); - SumLed.u32 |= readAndClearLed(mapIDELeds[3]); - for (unsigned i = 0; i < RT_ELEMENTS(mapSATALeds); ++i) - SumLed.u32 |= readAndClearLed(mapSATALeds[i]); - for (unsigned i = 0; i < RT_ELEMENTS(mapSCSILeds); ++i) - SumLed.u32 |= readAndClearLed(mapSCSILeds[i]); + for (unsigned i = 0; i < RT_ELEMENTS(mapStorageLeds); ++i) + if (maStorageDevType[i] == aDeviceType) + SumLed.u32 |= readAndClearLed(mapStorageLeds[i]); break; } @@ -7278,7 +7263,7 @@ static DECLCALLBACK(int) reconfigureMedium(PVM pVM, ULONG lInstance, rc = CFGMR3InsertNode(pCfg, "VDConfig", &pVDC); RC_CHECK(); for (size_t i = 0; i < names.size(); ++ i) { - if (values[i]) + if (values[i] && *values[i]) { Utf8Str name = names[i]; Utf8Str value = values[i]; @@ -7319,11 +7304,11 @@ static DECLCALLBACK(int) reconfigureMedium(PVM pVM, ULONG lInstance, rc = CFGMR3InsertNode(pCur, "VDConfig", &pVDC); RC_CHECK(); for (size_t i = 0; i < aNames.size(); ++ i) { - if (aValues[i]) + if (aValues[i] && *aValues[i]) { Utf8Str name = aNames[i]; Utf8Str value = aValues[i]; - rc = CFGMR3InsertString(pVDC, name.c_str(), value.c_str()); + rc = CFGMR3InsertString(pVDC, name.c_str(), value.c_str()); RC_CHECK(); if ( !(name.compare("HostIPStack")) && !(value.compare("0"))) fHostIP = false; diff --git a/src/VBox/Main/ConsoleImpl2.cpp b/src/VBox/Main/ConsoleImpl2.cpp index ee1bbd23d..c49d11534 100644 --- a/src/VBox/Main/ConsoleImpl2.cpp +++ b/src/VBox/Main/ConsoleImpl2.cpp @@ -823,6 +823,8 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) for (size_t i = 0; i < ctrls.size(); ++ i) { + DeviceType_T *paLedDevType = NULL; + StorageControllerType_T enmCtrlType; rc = ctrls[i]->COMGETTER(ControllerType)(&enmCtrlType); H(); AssertRelease((unsigned)enmCtrlType < RT_ELEMENTS(aCtrlNodes)); @@ -866,9 +868,11 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) rc = CFGMR3InsertNode(pCtlInst, "LUN#999", &pLunL0); RC_CHECK(); rc = CFGMR3InsertString(pLunL0, "Driver", "MainStatus"); RC_CHECK(); rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); - rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapSCSILeds[0]); RC_CHECK(); + rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedScsi]); RC_CHECK(); rc = CFGMR3InsertInteger(pCfg, "First", 0); RC_CHECK(); + Assert(cLedScsi >= 16); rc = CFGMR3InsertInteger(pCfg, "Last", 15); RC_CHECK(); + paLedDevType = &pConsole->maStorageDevType[iLedScsi]; break; } @@ -883,9 +887,11 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) rc = CFGMR3InsertNode(pCtlInst, "LUN#999", &pLunL0); RC_CHECK(); rc = CFGMR3InsertString(pLunL0, "Driver", "MainStatus"); RC_CHECK(); rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); - rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapSCSILeds[0]); RC_CHECK(); + rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedScsi]); RC_CHECK(); rc = CFGMR3InsertInteger(pCfg, "First", 0); RC_CHECK(); + Assert(cLedScsi >= 16); rc = CFGMR3InsertInteger(pCfg, "Last", 15); RC_CHECK(); + paLedDevType = &pConsole->maStorageDevType[iLedScsi]; break; } @@ -926,10 +932,11 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) rc = CFGMR3InsertNode(pCtlInst, "LUN#999", &pLunL0); RC_CHECK(); rc = CFGMR3InsertString(pLunL0, "Driver", "MainStatus"); RC_CHECK(); rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); - AssertRelease(cPorts <= RT_ELEMENTS(pConsole->mapSATALeds)); - rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapSATALeds[0]); RC_CHECK(); + AssertRelease(cPorts <= cLedSata); + rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedSata]); RC_CHECK(); rc = CFGMR3InsertInteger(pCfg, "First", 0); RC_CHECK(); rc = CFGMR3InsertInteger(pCfg, "Last", cPorts - 1); RC_CHECK(); + paLedDevType = &pConsole->maStorageDevType[iLedSata]; break; } @@ -950,9 +957,11 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) rc = CFGMR3InsertNode(pCtlInst, "LUN#999", &pLunL0); RC_CHECK(); rc = CFGMR3InsertString(pLunL0, "Driver", "MainStatus"); RC_CHECK(); rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); - rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapIDELeds[0]);RC_CHECK(); + rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedIde]); RC_CHECK(); rc = CFGMR3InsertInteger(pCfg, "First", 0); RC_CHECK(); + Assert(cLedIde >= 4); rc = CFGMR3InsertInteger(pCfg, "Last", 3); RC_CHECK(); + paLedDevType = &pConsole->maStorageDevType[iLedIde]; /* IDE flavors */ aCtrlNodes[StorageControllerType_PIIX3] = pDev; @@ -976,9 +985,11 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) rc = CFGMR3InsertNode(pCtlInst, "LUN#999", &pLunL0); RC_CHECK(); rc = CFGMR3InsertString(pLunL0, "Driver", "MainStatus"); RC_CHECK(); rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); - rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapFDLeds[0]); RC_CHECK(); + rc = CFGMR3InsertInteger(pCfg, "papLeds", (uintptr_t)&pConsole->mapStorageLeds[iLedFloppy]); RC_CHECK(); rc = CFGMR3InsertInteger(pCfg, "First", 0); RC_CHECK(); + Assert(cLedFloppy >= 1); rc = CFGMR3InsertInteger(pCfg, "Last", 0); RC_CHECK(); + paLedDevType = &pConsole->maStorageDevType[iLedFloppy]; break; } @@ -1118,7 +1129,7 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) { Utf8Str name = names[ii]; Utf8Str value = values[ii]; - rc = CFGMR3InsertString(pVDC, name.c_str(), value.c_str()); AssertRC(rc); /** @todo r=bird: why not RC_CHECK() here? (I added the AssertRC.)*/ + rc = CFGMR3InsertString(pVDC, name.c_str(), value.c_str()); RC_CHECK(); if ( name.compare("HostIPStack") == 0 && value.compare("0") == 0) fHostIP = false; @@ -1157,11 +1168,11 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) rc = CFGMR3InsertNode(pCur, "VDConfig", &pVDC); RC_CHECK(); for (size_t ii = 0; ii < aNames.size(); ++ii) { - if (aValues[ii]) + if (aValues[ii] && *aValues[ii]) { Utf8Str name = aNames[ii]; Utf8Str value = aValues[ii]; - rc = CFGMR3InsertString(pVDC, name.c_str(), value.c_str()); AssertRC(rc); /** @todo r=bird: why not RC_HCECK here? (I added the AssertRC.)*/ + rc = CFGMR3InsertString(pVDC, name.c_str(), value.c_str()); RC_CHECK(); if ( name.compare("HostIPStack") == 0 && value.compare("0") == 0) fHostIP = false; @@ -1182,6 +1193,9 @@ DECLCALLBACK(int) Console::configConstructor(PVM pVM, void *pvConsole) } } } + + if (paLedDevType) + paLedDevType[uLUN] = lType; } H(); } diff --git a/src/VBox/Main/DisplayImpl.cpp b/src/VBox/Main/DisplayImpl.cpp index 07c4aa791..f4ca9d71f 100644 --- a/src/VBox/Main/DisplayImpl.cpp +++ b/src/VBox/Main/DisplayImpl.cpp @@ -514,7 +514,10 @@ Display::displaySSMLoadScreenshot(PSSMHANDLE pSSM, void *pvUser, uint32_t uVersi LogFlowFunc(("[%d] type %d, size %d bytes\n", i, typeOfBlock, cbBlock)); - if (cbBlock != 0) + /* Note: displaySSMSaveScreenshot writes size of a block = 8 and + * does not write any data if the image size was 0. + */ + if (cbBlock > 2 * sizeof (uint32_t)) { rc = SSMR3Skip(pSSM, cbBlock); AssertRCBreak(rc); diff --git a/src/VBox/Main/MachineDebuggerImpl.cpp b/src/VBox/Main/MachineDebuggerImpl.cpp index 3cddef0be..a94a8d450 100644 --- a/src/VBox/Main/MachineDebuggerImpl.cpp +++ b/src/VBox/Main/MachineDebuggerImpl.cpp @@ -655,7 +655,7 @@ STDMETHODIMP MachineDebugger::ResetStats (IN_BSTR aPattern) Console::SafeVMPtrQuiet pVM (mParent); if (!pVM.isOk()) - return E_FAIL; + return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running"); STAMR3Reset (pVM, Utf8Str (aPattern).raw()); @@ -673,7 +673,7 @@ STDMETHODIMP MachineDebugger::DumpStats (IN_BSTR aPattern) Console::SafeVMPtrQuiet pVM (mParent); if (!pVM.isOk()) - return E_FAIL; + return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running"); STAMR3Dump (pVM, Utf8Str (aPattern).raw()); @@ -693,7 +693,7 @@ STDMETHODIMP MachineDebugger::GetStats (IN_BSTR aPattern, BOOL aWithDescriptions Console::SafeVMPtrQuiet pVM (mParent); if (!pVM.isOk()) - return E_FAIL; + return setError(VBOX_E_INVALID_VM_STATE, "Machine is not running"); char *pszSnapshot; int vrc = STAMR3Snapshot (pVM, Utf8Str (aPattern).raw(), &pszSnapshot, NULL, diff --git a/src/VBox/Main/MachineImpl.cpp b/src/VBox/Main/MachineImpl.cpp index 26ba9ff23..fb2792d06 100644 --- a/src/VBox/Main/MachineImpl.cpp +++ b/src/VBox/Main/MachineImpl.cpp @@ -162,8 +162,8 @@ Machine::HWData::HWData() mAccelerate2DVideoEnabled = false; mMonitorCount = 1; mHWVirtExEnabled = true; - mHWVirtExNestedPagingEnabled = false; - mHWVirtExVPIDEnabled = false; + mHWVirtExNestedPagingEnabled = true; + mHWVirtExVPIDEnabled = true; #if defined(RT_OS_DARWIN) || defined(RT_OS_WINDOWS) mHWVirtExExclusive = false; #else @@ -633,13 +633,7 @@ void Machine::uninit() LogFlowThisFunc(("initFailed()=%d\n", autoUninitSpan.initFailed())); LogFlowThisFunc(("mRegistered=%d\n", mData->mRegistered)); - /* Enter this object lock because there may be a SessionMachine instance - * somewhere around, that shares our data and lock but doesn't use our - * addCaller()/removeCaller(), and it may be also accessing the same data - * members. mParent lock is necessary as well because of - * SessionMachine::uninit(), etc. - */ - AutoMultiWriteLock2 alock (mParent, this); + AutoMultiWriteLock2 alock(mParent, this); if (!mData->mSession.mMachine.isNull()) { @@ -655,16 +649,14 @@ void Machine::uninit() * after we return from this method (it expects the Machine instance is * still valid). We'll call it ourselves below. */ - LogWarningThisFunc(("Session machine is not NULL (%p), " - "the direct session is still open!\n", - (SessionMachine *) mData->mSession.mMachine)); + LogWarningThisFunc(("Session machine is not NULL (%p), the direct session is still open!\n", + (SessionMachine*)mData->mSession.mMachine)); - if (Global::IsOnlineOrTransient (mData->mMachineState)) + if (Global::IsOnlineOrTransient(mData->mMachineState)) { LogWarningThisFunc(("Setting state to Aborted!\n")); /* set machine state using SessionMachine reimplementation */ - static_cast (mData->mSession.mMachine) - ->setMachineState (MachineState_Aborted); + static_cast(mData->mSession.mMachine)->setMachineState (MachineState_Aborted); } /* @@ -673,7 +665,7 @@ void Machine::uninit() */ mData->mSession.mMachine->uninit(); /* SessionMachine::uninit() must set mSession.mMachine to null */ - Assert (mData->mSession.mMachine.isNull()); + Assert(mData->mSession.mMachine.isNull()); } /* the lock is no more necessary (SessionMachine is uninitialized) */ @@ -3295,6 +3287,19 @@ STDMETHODIMP Machine::GetSnapshot (IN_BSTR aId, ISnapshot **aSnapshot) AutoReadLock alock(this); Guid uuid(aId); + /* Todo: fix this properly by perhaps introducing an isValid method for the Guid class */ + if ( (aId) + && (*aId != '\0') // an empty Bstr means "get root snapshot", so don't fail on that + && (uuid.isEmpty())) + { + RTUUID uuidTemp; + /* Either it's a null UUID or the conversion failed. (null uuid has a special meaning in findSnapshot) */ + if (RT_FAILURE(RTUuidFromUtf16(&uuidTemp, aId))) + return setError(E_FAIL, + tr("Could not find a snapshot with UUID {%ls}"), + aId); + } + ComObjPtr snapshot; HRESULT rc = findSnapshot(uuid, snapshot, true /* aSetError */); @@ -4018,7 +4023,10 @@ static int readSavedDisplayScreenshot(Utf8Str *pStateFilePath, uint32_t u32Type, } else { - if (cbBlock != 0) + /* displaySSMSaveScreenshot did not write any data, if + * cbBlock was == 2 * sizeof (uint32_t). + */ + if (cbBlock > 2 * sizeof (uint32_t)) { rc = SSMR3Skip(pSSM, cbBlock); AssertRCBreak(rc); @@ -4835,24 +4843,10 @@ HRESULT Machine::openExistingSession (IInternalSessionControl *aControl) ComAssertRet (!mData->mSession.mDirectControl.isNull(), E_FAIL); - /* - * Get the console from the direct session (note that we don't leave the - * lock here because GetRemoteConsole must not call us back). - */ - ComPtr console; - HRESULT rc = mData->mSession.mDirectControl-> - GetRemoteConsole (console.asOutParam()); - if (FAILED (rc)) - { - /* The failure may occur w/o any error info (from RPC), so provide one */ - return setError (VBOX_E_VM_ERROR, - tr ("Failed to get a console object from the direct session (%Rrc)"), rc); - } - - ComAssertRet (!console.isNull(), E_FAIL); - - ComObjPtr sessionMachine = mData->mSession.mMachine; - AssertReturn(!sessionMachine.isNull(), E_FAIL); + // copy member variables before leaving lock + ComPtr pDirectControl = mData->mSession.mDirectControl; + ComObjPtr pSessionMachine = mData->mSession.mMachine; + AssertReturn(!pSessionMachine.isNull(), E_FAIL); /* * Leave the lock before calling the client process. It's safe here @@ -4862,9 +4856,21 @@ HRESULT Machine::openExistingSession (IInternalSessionControl *aControl) */ alock.leave(); + // get the console from the direct session (this is a remote call) + ComPtr pConsole; + LogFlowThisFunc(("Calling GetRemoteConsole()...\n")); + HRESULT rc = pDirectControl->GetRemoteConsole(pConsole.asOutParam()); + LogFlowThisFunc(("GetRemoteConsole() returned %08X\n", rc)); + if (FAILED (rc)) + /* The failure may occur w/o any error info (from RPC), so provide one */ + return setError (VBOX_E_VM_ERROR, + tr ("Failed to get a console object from the direct session (%Rrc)"), rc); + + ComAssertRet(!pConsole.isNull(), E_FAIL); + /* attach the remote session to the machine */ LogFlowThisFunc(("Calling AssignRemoteMachine()...\n")); - rc = aControl->AssignRemoteMachine (sessionMachine, console); + rc = aControl->AssignRemoteMachine(pSessionMachine, pConsole); LogFlowThisFunc(("AssignRemoteMachine() returned %08X\n", rc)); /* The failure may occur w/o any error info (from RPC), so provide one */ @@ -4886,7 +4892,7 @@ HRESULT Machine::openExistingSession (IInternalSessionControl *aControl) } /* store the control in the list */ - mData->mSession.mRemoteControls.push_back (aControl); + mData->mSession.mRemoteControls.push_back(aControl); LogFlowThisFuncLeave(); return S_OK; @@ -5538,9 +5544,14 @@ void Machine::uninitDataAndChildObjects() if (mType == IsMachine) { - /* reset some important fields of mData */ + // clean up the snapshots list (Snapshot::uninit() will handle the snapshot's children recursively) + if (mData->mFirstSnapshot) + { + mData->mFirstSnapshot->uninit(); + mData->mFirstSnapshot.setNull(); + } + mData->mCurrentSnapshot.setNull(); - mData->mFirstSnapshot.setNull(); } /* free data structures (the essential mData structure is not freed here @@ -9699,7 +9710,7 @@ HRESULT SessionMachine::onSharedFolderChange() * Returns @c true if this machine's USB controller reports it has a matching * filter for the given USB device and @c false otherwise. * - * @note Locks this object for reading. + * @note Caller must have requested machine write lock. */ bool SessionMachine::hasMatchingUSBFilter (const ComObjPtr &aDevice, ULONG *aMaskedIfs) { @@ -9709,7 +9720,7 @@ bool SessionMachine::hasMatchingUSBFilter (const ComObjPtr &aDevi if (!autoCaller.isOk()) return false; - AutoReadLock alock(this); + AssertReturn(isWriteLockOnCurrentThread(), false); #ifdef VBOX_WITH_USB switch (mData->mMachineState) diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk index 075cef616..c48836ca8 100644 --- a/src/VBox/Main/Makefile.kmk +++ b/src/VBox/Main/Makefile.kmk @@ -457,7 +457,9 @@ $(VBOX_XML_SCHEMADEFS_CPP): $(VBOX_XML_SCHEMADEFS_XSL) $(VBOX_XML_SCHEMA.$(KBUIL OTHER_CLEAN += $(VBOX_XML_SCHEMADEFS_H) $(VBOX_XML_SCHEMADEFS_CPP) -if (defined(VBOX_WITH_CROGL) || defined(VBOX_WITH_VIDEOHWACCEL)) && !defined(VBOX_WITH_DEBUG_VCC_CRT) +if ( defined(VBOX_WITH_QTGUI) \ + && (defined(VBOX_WITH_CROGL) || defined(VBOX_WITH_VIDEOHWACCEL)) \ + && !defined(VBOX_WITH_DEBUG_VCC_CRT)) ifneq ($(KBUILD_TARGET),darwin) # # VBoxTestOGL - OpenGL support test app. diff --git a/src/VBox/Main/MediumAttachmentImpl.cpp b/src/VBox/Main/MediumAttachmentImpl.cpp index fdb7db8bc..e02b37a0c 100644 --- a/src/VBox/Main/MediumAttachmentImpl.cpp +++ b/src/VBox/Main/MediumAttachmentImpl.cpp @@ -82,8 +82,8 @@ HRESULT MediumAttachment::init(Machine *aParent, unconst(m->port) = aPort; unconst(m->device) = aDevice; unconst(m->type) = aType; - unconst(m->passthrough) = aPassthrough; + m->passthrough = aPassthrough; /* Newly created attachments never have an implicitly created medium * associated with them. Implicit diff image creation happens later. */ m->implicit = false; diff --git a/src/VBox/Main/MediumImpl.cpp b/src/VBox/Main/MediumImpl.cpp index 1eb54b37d..81b94e385 100644 --- a/src/VBox/Main/MediumImpl.cpp +++ b/src/VBox/Main/MediumImpl.cpp @@ -1257,7 +1257,7 @@ HRESULT Medium::init(VirtualBox *aVirtualBox, * @note All children of this hard disk get uninitialized by calling their * uninit() methods. * - * @note Locks getTreeLock() for writing, VirtualBox for writing. + * @note Caller must hold the tree lock of the medium tree this medium is on. */ void Medium::uninit() { @@ -1628,11 +1628,11 @@ STDMETHODIMP Medium::COMGETTER(LogicalSize)(ULONG64 *aLogicalSize) AutoCaller autoCaller(this); CheckComRCReturnRC(autoCaller.rc()); - AutoReadLock alock(this); - /* we access mParent */ AutoReadLock treeLock(this->getTreeLock()); + AutoReadLock alock(this); + if (mParent.isNull()) { *aLogicalSize = m->logicalSize; @@ -2963,11 +2963,11 @@ bool Medium::isReadOnly() AutoCaller autoCaller(this); AssertComRCReturn(autoCaller.rc(), false); - AutoReadLock alock(this); - /* we access children */ AutoReadLock treeLock(this->getTreeLock()); + AutoReadLock alock(this); + switch (m->type) { case MediumType_Normal: @@ -3010,11 +3010,11 @@ HRESULT Medium::saveSettings(settings::Medium &data) AutoCaller autoCaller(this); CheckComRCReturnRC(autoCaller.rc()); - AutoReadLock alock(this); - /* we access mParent */ AutoReadLock treeLock(this->getTreeLock()); + AutoReadLock alock(this); + data.uuid = m->id; data.strLocation = m->strLocation; data.strFormat = m->strFormat; @@ -3115,7 +3115,8 @@ HRESULT Medium::compareLocationTo(const char *aLocation, int &aResult) /** * Checks that this hard disk may be discarded and performs necessary state - * changes. + * changes. Must not be called for writethrough disks because there is nothing + * to discard then. * * This method is to be called prior to calling the #discard() to perform * necessary consistency checks and place involved hard disks to appropriate @@ -3142,7 +3143,9 @@ HRESULT Medium::prepareDiscard(MergeChain * &aChain) /* we access mParent & children() */ AutoReadLock treeLock(this->getTreeLock()); - AssertReturn(m->type == MediumType_Normal, E_FAIL); + // Medium must not be writethrough at this point + AssertReturn( m->type == MediumType_Normal + || m->type == MediumType_Immutable, E_FAIL); if (getChildren().size() == 0) { diff --git a/src/VBox/Main/NetworkAdapterImpl.cpp b/src/VBox/Main/NetworkAdapterImpl.cpp index ca012fa3b..0632659eb 100644 --- a/src/VBox/Main/NetworkAdapterImpl.cpp +++ b/src/VBox/Main/NetworkAdapterImpl.cpp @@ -906,8 +906,6 @@ HRESULT NetworkAdapter::loadSettings(const settings::NetworkAdapter &data) AutoCaller autoCaller(this); AssertComRCReturnRC(autoCaller.rc()); - AutoWriteLock alock(this); - /* Note: we assume that the default values for attributes of optional * nodes are assigned in the Data::Data() constructor and don't do it * here. It implies that this method may only be called after constructing diff --git a/src/VBox/Main/SnapshotImpl.cpp b/src/VBox/Main/SnapshotImpl.cpp index 6fcebc5d3..5201401e3 100644 --- a/src/VBox/Main/SnapshotImpl.cpp +++ b/src/VBox/Main/SnapshotImpl.cpp @@ -1988,8 +1988,11 @@ STDMETHODIMP SessionMachine::DeleteSnapshot(IConsole *aInitiator, ComObjPtr pHD = pAttach->getMedium(); Assert(pHD); AutoReadLock mlock(pHD); - if (pHD->getType() == MediumType_Normal) + + MediumType_T type = pHD->getType(); + if (type != MediumType_Writethrough) // writethrough images are unaffected by snapshots, so do nothing for them { + // normal or immutable: then this will need to be discarded ++ulOpCount; ulTotalWeight += (ULONG)(pHD->getSize() / _1M); } @@ -2141,7 +2144,18 @@ void SessionMachine::deleteSnapshotHandler(DeleteSnapshotTask &aTask) { Assert(pAttach->getMedium()); ComObjPtr pHD = pAttach->getMedium(); - // do not lock, prepareDiscared() has a write lock which will hang otherwise + + { + // writethrough images are unaffected by snapshots, so do nothing for them + AutoReadLock medlock(pHD); + MediumType_T type = pHD->getType(); + if (type == MediumType_Writethrough) + continue; + } + + // image is normal or immutable: then this will need to be discarded + + // do not lock medium now, prepareDiscard() has a write lock which will hang otherwise #ifdef DEBUG pHD->dumpBackRefs(); diff --git a/src/VBox/Main/USBControllerImpl.cpp b/src/VBox/Main/USBControllerImpl.cpp index ec4067aa9..24bf919d2 100644 --- a/src/VBox/Main/USBControllerImpl.cpp +++ b/src/VBox/Main/USBControllerImpl.cpp @@ -554,15 +554,13 @@ STDMETHODIMP USBController::RemoveDeviceFilter (ULONG aPosition, * * @param aMachineNode node. * - * @note Locks this object for writing. + * @note Does not lock "this" as Machine::loadHardware, which calls this, does not lock either. */ HRESULT USBController::loadSettings(const settings::USBController &data) { AutoCaller autoCaller(this); AssertComRCReturnRC(autoCaller.rc()); - AutoWriteLock alock(this); - /* Note: we assume that the default values for attributes of optional * nodes are assigned in the Data::Data() constructor and don't do it * here. It implies that this method may only be called after constructing diff --git a/src/VBox/Main/VMMDevInterface.cpp b/src/VBox/Main/VMMDevInterface.cpp index 721a6ad8b..9f82ffc51 100644 --- a/src/VBox/Main/VMMDevInterface.cpp +++ b/src/VBox/Main/VMMDevInterface.cpp @@ -101,6 +101,13 @@ VMMDev::VMMDev(Console *console) : mpDrv(NULL) VMMDev::~VMMDev() { +#ifdef VBOX_WITH_HGCM + if (hgcmIsActive()) + { + ASMAtomicWriteBool(&m_fHGCMActive, false); + HGCMHostShutdown(); + } +#endif /* VBOX_WITH_HGCM */ RTSemEventDestroy (mCredentialsEvent); if (mpDrv) mpDrv->pVMMDev = NULL; diff --git a/src/VBox/Main/generic/OpenGLTestApp.cpp b/src/VBox/Main/generic/OpenGLTestApp.cpp index bb97095be..0b7056c78 100644 --- a/src/VBox/Main/generic/OpenGLTestApp.cpp +++ b/src/VBox/Main/generic/OpenGLTestApp.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2009 Sun Microsystems, Inc. + * Copyright (C) 2009-2010 Sun Microsystems, Inc. * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -184,7 +184,7 @@ static int vboxInitLogging(const char *pszFilename, bool bGenNameSuffix) /* register this logger as the release logger */ RTLogRelSetDefaultInstance(loggerRelease); - + return VINF_SUCCESS; } @@ -285,8 +285,8 @@ int main(int argc, char **argv) break; #endif case 'h': - RTPrintf("VirtualBox Helper for testing 2D/3D OpenGL capabilities %u.%u.%u\n" - "(C) 2009 Sun Microsystems, Inc.\n" + RTPrintf(VBOX_PRODUCT " Helper for testing 2D/3D OpenGL capabilities %u.%u.%u\n" + "(C) 2009-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "All rights reserved.\n" "\n" "Parameters:\n" diff --git a/src/VBox/Main/include/ConsoleImpl.h b/src/VBox/Main/include/ConsoleImpl.h index 46269b529..447fe8387 100644 --- a/src/VBox/Main/include/ConsoleImpl.h +++ b/src/VBox/Main/include/ConsoleImpl.h @@ -575,16 +575,26 @@ private: VMMDev * const mVMMDev; AudioSniffer * const mAudioSniffer; - PPDMLED mapFDLeds[2]; - PPDMLED mapIDELeds[4]; - PPDMLED mapSATALeds[30]; - PPDMLED mapSCSILeds[16]; - PPDMLED mapNetworkLeds[SchemaDefs::NetworkAdapterCount]; - PPDMLED mapSharedFolderLed; - PPDMLED mapUSBLed[2]; + enum + { + iLedFloppy = 0, + cLedFloppy = 1, + iLedIde = iLedFloppy + cLedFloppy, + cLedIde = 4, + iLedSata = iLedIde + cLedIde, + cLedSata = 30, + iLedScsi = iLedSata + cLedSata, + cLedScsi = 16, + cLedStorage = cLedFloppy + cLedIde + cLedSata + cLedScsi, + }; + DeviceType_T maStorageDevType[cLedStorage]; + PPDMLED mapStorageLeds[cLedStorage]; + PPDMLED mapNetworkLeds[SchemaDefs::NetworkAdapterCount]; + PPDMLED mapSharedFolderLed; + PPDMLED mapUSBLed[2]; #if !defined(VBOX_WITH_NETFLT) && (defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD)) - Utf8Str maTAPDeviceName[8]; - RTFILE maTapFD[8]; + Utf8Str maTAPDeviceName[8]; + RTFILE maTapFD[8]; #endif bool mVMStateChangeCallbackDisabled; diff --git a/src/VBox/Main/webservice/vboxweb.cpp b/src/VBox/Main/webservice/vboxweb.cpp index 3210233e0..9c8131d63 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-2009 Sun Microsystems, Inc. + * Copyright (C) 2006-2010 Sun Microsystems, Inc. * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -264,9 +264,9 @@ int main(int argc, char* argv[]) // intialize runtime RTR3Init(); - RTStrmPrintf(g_pStdErr, "Sun VirtualBox Webservice Version %s\n" - "(C) 2005-2009 Sun Microsystems, Inc.\n" - "All rights reserved.\n", VBOX_VERSION_STRING); + RTStrmPrintf(g_pStdErr, VBOX_PRODUCT " Webservice Version " VBOX_VERSION_STRING "\n" + "(C) 2005-" VBOX_C_YEAR " " VBOX_VENDOR "\n" + "All rights reserved.\n"); int c; RTGETOPTUNION ValueUnion; diff --git a/src/VBox/Main/xml/Settings.cpp b/src/VBox/Main/xml/Settings.cpp index 190929a23..e2fbe1d23 100644 --- a/src/VBox/Main/xml/Settings.cpp +++ b/src/VBox/Main/xml/Settings.cpp @@ -1249,8 +1249,8 @@ Hardware::Hardware() : strVersion("1"), fHardwareVirt(true), fHardwareVirtExclusive(HWVIRTEXCLUSIVEDEFAULT), - fNestedPaging(false), - fVPID(false), + fNestedPaging(true), + fVPID(true), fSyntheticCpu(false), fPAE(false), cCPUs(1), @@ -1955,7 +1955,7 @@ void MachineConfigFile::readStorageControllers(const xml::ElementNode &elmStorag throw ConfigFileError(this, pelmController, N_("Required StorageController/@name attribute is missing")); // canonicalize storage controller names for configs in the switchover // period. - if (m->sv <= SettingsVersion_v1_9) + if (m->sv < SettingsVersion_v1_9) { if (sctl.strName == "IDE") sctl.strName = "IDE Controller"; @@ -2914,8 +2914,7 @@ void MachineConfigFile::writeStorageControllers(xml::ElementNode &elmParent, case DeviceType_DVD: pcszType = "DVD"; - if (att.fPassThrough) - pelmDevice->setAttribute("passthrough", att.fPassThrough); + pelmDevice->setAttribute("passthrough", att.fPassThrough); break; case DeviceType_Floppy: diff --git a/src/VBox/Main/xpcom/server.cpp b/src/VBox/Main/xpcom/server.cpp index 0b110fbda..576a2ac27 100644 --- a/src/VBox/Main/xpcom/server.cpp +++ b/src/VBox/Main/xpcom/server.cpp @@ -1017,12 +1017,12 @@ int main(int argc, char **argv) int iSize; iSize = RTStrPrintf(szBuf, sizeof(szBuf), - "Sun VirtualBox XPCOM Server Version " + VBOX_PRODUCT" XPCOM Server Version " VBOX_VERSION_STRING); for (int i = iSize; i > 0; i--) putchar('*'); RTPrintf("\n%s\n", szBuf); - RTPrintf("(C) 2008-2009 Sun Microsystems, Inc.\n" + RTPrintf("(C) 2008-" VBOX_C_YEAR " " VBOX_VENDOR "\n" "All rights reserved.\n"); #ifdef DEBUG RTPrintf("Debug version.\n"); diff --git a/src/VBox/Makefile.kmk b/src/VBox/Makefile.kmk index 9831b23de..a9a2041af 100644 --- a/src/VBox/Makefile.kmk +++ b/src/VBox/Makefile.kmk @@ -63,7 +63,7 @@ else ifdef VBOX_WITH_VRDP include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk endif - ifdef VBOX_WITH_CROGL + if defined(VBOX_WITH_CROGL) || defined(VBOX_WITH_HGSMI) || defined(VBOX_WITH_HGCM) include $(PATH_SUB_CURRENT)/GuestHost/Makefile.kmk endif ifdef VBOX_WITH_ADDITIONS diff --git a/src/VBox/RDP/client/rdesktop.c b/src/VBox/RDP/client/rdesktop.c index 9dba52050..8996f7534 100644 --- a/src/VBox/RDP/client/rdesktop.c +++ b/src/VBox/RDP/client/rdesktop.c @@ -39,6 +39,10 @@ #include #include "rdesktop.h" +#ifdef VBOX +# include +#endif + #ifdef HAVE_LOCALE_H #include #endif @@ -146,7 +150,7 @@ usage(char *program) { fprintf(stderr, "rdesktop: A Remote Desktop Protocol client.\n"); fprintf(stderr, "Version " VERSION ". Copyright (C) 1999-2008 Matthew Chapman.\n"); - fprintf(stderr, "Modified for VirtualBox by Sun Microsystems, Inc.\n"); + fprintf(stderr, "Modified for VirtualBox by " VBOX_VENDOR "\n"); fprintf(stderr, "See http://www.rdesktop.org/ for more information.\n\n"); fprintf(stderr, "Usage: %s [options] server[:port]\n", program); diff --git a/src/VBox/Runtime/VBox/log-vbox.cpp b/src/VBox/Runtime/VBox/log-vbox.cpp index 5e1f19808..bdb28ae6f 100644 --- a/src/VBox/Runtime/VBox/log-vbox.cpp +++ b/src/VBox/Runtime/VBox/log-vbox.cpp @@ -135,6 +135,12 @@ # include # elif defined(RT_OS_LINUX) # include +# elif defined(RT_OS_FREEBSD) +# include +# include +# include +# include +# include # elif defined(RT_OS_SOLARIS) # define _STRUCTURED_PROC 1 # undef _FILE_OFFSET_BITS /* procfs doesn't like this */ @@ -157,6 +163,7 @@ # include # include # include +# include # include #endif @@ -339,12 +346,8 @@ RTDECL(PRTLOGGER) RTLogDefaultInit(void) fclose(pFile); } -# elif defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) -# ifdef RT_OS_LINUX +# elif defined(RT_OS_LINUX) FILE *pFile = fopen("/proc/self/cmdline", "r"); -# else /* RT_OS_FREEBSD: */ - FILE *pFile = fopen("/proc/curproc/cmdline", "r"); -# endif if (pFile) { /* braindead */ @@ -371,6 +374,40 @@ RTDECL(PRTLOGGER) RTLogDefaultInit(void) fclose(pFile); } +# elif defined(RT_OS_FREEBSD) + /* Retrieve the required length first */ + int aiName[4]; + aiName[0] = CTL_KERN; + aiName[1] = KERN_PROC; + aiName[2] = KERN_PROC_ARGS; /* Introduced in FreeBSD 4.0 */ + aiName[3] = getpid(); + size_t cchArgs = 0; + int rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), NULL, &cchArgs, NULL, 0); + if (cchArgs > 0) + { + char *pszArgFileBuf = (char *)RTMemAllocZ(cchArgs + 1 /* Safety */); + if (pszArgFileBuf) + { + /* Retrieve the argument list */ + rcBSD = sysctl(aiName, RT_ELEMENTS(aiName), pszArgFileBuf, &cchArgs, NULL, 0); + if (!rcBSD) + { + unsigned iArg = 0; + size_t off = 0; + while (off < cchArgs) + { + size_t cchArg = strlen(&pszArgFileBuf[off]); + RTLogLoggerEx(pLogger, 0, ~0U, "Arg[%u]: %s\n", iArg, &pszArgFileBuf[off]); + + /* advance */ + off += cchArg + 1; + iArg++; + } + } + RTMemFree(pszArgFileBuf); + } + } + # elif defined(RT_OS_L4) || defined(RT_OS_OS2) || defined(RT_OS_DARWIN) /* commandline? */ # else diff --git a/src/VBox/Runtime/common/checksum/RTSha1Digest.cpp b/src/VBox/Runtime/common/checksum/RTSha1Digest.cpp index f7b611771..f032de349 100644 --- a/src/VBox/Runtime/common/checksum/RTSha1Digest.cpp +++ b/src/VBox/Runtime/common/checksum/RTSha1Digest.cpp @@ -63,7 +63,7 @@ RTR3DECL(int) RTSha1Digest(const char *pszFile, char **ppszDigest) /* Open the file to calculate a SHA1 sum of */ PRTSTREAM pStream; - int rc = RTStrmOpen(pszFile, "r+b", &pStream); + int rc = RTStrmOpen(pszFile, "rb", &pStream); if (RT_FAILURE(rc)) return rc; diff --git a/src/VBox/Runtime/common/misc/tar.cpp b/src/VBox/Runtime/common/misc/tar.cpp index e0bd78a17..670c61dea 100644 --- a/src/VBox/Runtime/common/misc/tar.cpp +++ b/src/VBox/Runtime/common/misc/tar.cpp @@ -296,7 +296,7 @@ static int rtTarCopyFileTo(RTFILE hFile, const char *pszSrcName) /* Make sure the called doesn't mix truncated tar files with the * official end indicated by rtTarCalcChkSum. */ if (rc == VERR_EOF) - rc == VERR_FILE_IO_ERROR; + rc = VERR_FILE_IO_ERROR; } } diff --git a/src/VBox/Runtime/generic/RTFileReadAll-generic.cpp b/src/VBox/Runtime/generic/RTFileReadAll-generic.cpp index 6f3957f79..9c33ffe4c 100644 --- a/src/VBox/Runtime/generic/RTFileReadAll-generic.cpp +++ b/src/VBox/Runtime/generic/RTFileReadAll-generic.cpp @@ -38,7 +38,7 @@ RTDECL(int) RTFileReadAll(const char *pszFilename, void **ppvFile, size_t *pcbFile) { - return RTFileReadAllEx(pszFilename, 0, RTFOFF_MAX, 0, ppvFile, pcbFile); + return RTFileReadAllEx(pszFilename, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_NONE, ppvFile, pcbFile); } RT_EXPORT_SYMBOL(RTFileReadAll); diff --git a/src/VBox/Runtime/include/internal/iprt.h b/src/VBox/Runtime/include/internal/iprt.h index 177de5833..2bdebc0ff 100644 --- a/src/VBox/Runtime/include/internal/iprt.h +++ b/src/VBox/Runtime/include/internal/iprt.h @@ -43,7 +43,9 @@ && defined(MODULE) \ && !defined(RT_NO_EXPORT_SYMBOL) # define bool linux_bool /* see r0drv/linux/the-linux-kernel.h */ -# include +# ifndef AUTOCONF_INCLUDED +# include +# endif # if defined(CONFIG_MODVERSIONS) && !defined(MODVERSIONS) # include # define MODVERSIONS diff --git a/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h b/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h index 7b935e499..3c141b7e5 100644 --- a/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h +++ b/src/VBox/Runtime/r0drv/linux/the-linux-kernel.h @@ -38,7 +38,9 @@ #include #define bool linux_bool -#include +#ifndef AUTOCONF_INCLUDED +# include +#endif #include /* We only support 2.4 and 2.6 series kernels */ @@ -201,9 +203,9 @@ DECLINLINE(unsigned long) msecs_to_jiffies(unsigned int cMillies) /* * This sucks soooo badly on x86! Why don't they export __PAGE_KERNEL_EXEC so PAGE_KERNEL_EXEC would be usable? */ -#if defined(RT_ARCH_AMD64) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 8) && defined(RT_ARCH_AMD64) # define MY_PAGE_KERNEL_EXEC PAGE_KERNEL_EXEC -#elif defined(PAGE_KERNEL_EXEC) && defined(CONFIG_X86_PAE) +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 8) && defined(PAGE_KERNEL_EXEC) && defined(CONFIG_X86_PAE) # ifdef __PAGE_KERNEL_EXEC /* >= 2.6.27 */ # define MY_PAGE_KERNEL_EXEC __pgprot(cpu_has_pge ? __PAGE_KERNEL_EXEC | _PAGE_GLOBAL : __PAGE_KERNEL_EXEC) diff --git a/src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp b/src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp index 602f284aa..e3c3a395b 100644 --- a/src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp +++ b/src/VBox/Runtime/r3/freebsd/rtProcInitExePath-freebsd.cpp @@ -32,6 +32,8 @@ * Header Files * *******************************************************************************/ #define LOG_GROUP RTLOGGROUP_PROCESS +#include +#include #include #include #include @@ -47,6 +49,36 @@ DECLHIDDEN(int) rtProcInitExePath(char *pszPath, size_t cchPath) { +#ifdef KERN_PROC_PATHNAME + int aiName[4]; + aiName[0] = CTL_KERN; + aiName[1] = KERN_PROC; + aiName[2] = KERN_PROC_PATHNAME; /* This was introduced in FreeBSD 6.0, thus the #ifdef above. */ + aiName[3] = -1; /* Shorthand for the current process. */ + + size_t cchExePath = cchPath; + if (sysctl(aiName, RT_ELEMENTS(aiName), pszPath, &cchExePath, NULL, 0) == 0) + { + + char *pszTmp = NULL; + int rc = rtPathFromNative(&pszTmp, pszPath); + AssertMsgRCReturn(rc, ("rc=%Rrc pszPath=\"%s\"\nhex: %.*Rhsx\n", rc, pszPath, cchExePath, pszPath), rc); + + size_t cch = strlen(pszTmp); + AssertReturn(cch <= cchPath, VERR_BUFFER_OVERFLOW); + + memcpy(pszPath, pszTmp, cch + 1); + RTStrFree(pszTmp); + + return VINF_SUCCESS; + } + + int rc = RTErrConvertFromErrno(errno); + AssertMsgFailed(("rc=%Rrc errno=%d cchExePath=%d\n", rc, errno, cchExePath)); + return rc; + +#else + /* * Read the /proc/curproc/file link, convert to native and return it. */ @@ -102,5 +134,6 @@ DECLHIDDEN(int) rtProcInitExePath(char *pszPath, size_t cchPath) int rc = RTErrConvertFromErrno(err); AssertMsgFailed(("rc=%Rrc err=%d cchLink=%d hExe=%p\n", rc, err, cchLink, hExe)); return rc; +#endif } diff --git a/src/VBox/Runtime/r3/linux/semevent-linux.cpp b/src/VBox/Runtime/r3/linux/semevent-linux.cpp index 4d93acd85..8a328454b 100644 --- a/src/VBox/Runtime/r3/linux/semevent-linux.cpp +++ b/src/VBox/Runtime/r3/linux/semevent-linux.cpp @@ -204,8 +204,8 @@ static int rtSemEventWait(RTSEMEVENT EventSem, unsigned cMillies, bool fAutoResu if (!cMillies) return VERR_TIMEOUT; ts.tv_sec = cMillies / 1000; - ts.tv_nsec = (cMillies % 1000) * 1000000; - u64End = RTTimeSystemNanoTS() + cMillies * 1000000; + ts.tv_nsec = (cMillies % 1000) * UINT32_C(1000000); + u64End = RTTimeSystemNanoTS() + cMillies * UINT64_C(1000000); pTimeout = &ts; } @@ -259,8 +259,8 @@ static int rtSemEventWait(RTSEMEVENT EventSem, unsigned cMillies, bool fAutoResu rc = VERR_TIMEOUT; break; } - ts.tv_sec = i64Diff / 1000000000; - ts.tv_nsec = i64Diff % 1000000000; + ts.tv_sec = (uint64_t)i64Diff / UINT32_C(1000000000); + ts.tv_nsec = (uint64_t)i64Diff % UINT32_C(1000000000); } } diff --git a/src/VBox/Runtime/r3/linux/semeventmulti-linux.cpp b/src/VBox/Runtime/r3/linux/semeventmulti-linux.cpp index 67c4a5d80..711a12673 100644 --- a/src/VBox/Runtime/r3/linux/semeventmulti-linux.cpp +++ b/src/VBox/Runtime/r3/linux/semeventmulti-linux.cpp @@ -223,8 +223,8 @@ static int rtSemEventMultiWait(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies, if (!cMillies) return VERR_TIMEOUT; ts.tv_sec = cMillies / 1000; - ts.tv_nsec = (cMillies % 1000) * 1000000; - u64End = RTTimeSystemNanoTS() + cMillies * 1000000; + ts.tv_nsec = (cMillies % 1000) * UINT32_C(1000000); + u64End = RTTimeSystemNanoTS() + cMillies * UINT64_C(1000000); pTimeout = &ts; } @@ -248,8 +248,8 @@ static int rtSemEventMultiWait(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies, int64_t i64Diff = u64End - RTTimeSystemNanoTS(); if (i64Diff < 1000) return VERR_TIMEOUT; - ts.tv_sec = i64Diff / 1000000000; - ts.tv_nsec = i64Diff % 1000000000; + ts.tv_sec = (uint64_t)i64Diff / UINT32_C(1000000000); + ts.tv_nsec = (uint64_t)i64Diff % UINT32_C(1000000000); } long rc = sys_futex(&pThis->iState, FUTEX_WAIT, 1, pTimeout, NULL, 0); if (RT_UNLIKELY(pThis->iMagic != RTSEMEVENTMULTI_MAGIC)) diff --git a/src/VBox/Runtime/r3/linux/semmutex-linux.cpp b/src/VBox/Runtime/r3/linux/semmutex-linux.cpp index 1c82af275..36d781a6d 100644 --- a/src/VBox/Runtime/r3/linux/semmutex-linux.cpp +++ b/src/VBox/Runtime/r3/linux/semmutex-linux.cpp @@ -177,8 +177,8 @@ static int rtsemMutexRequest(RTSEMMUTEX MutexSem, unsigned cMillies, bool fAutoR if (cMillies != RT_INDEFINITE_WAIT) { ts.tv_sec = cMillies / 1000; - ts.tv_nsec = (cMillies % 1000) * 1000000; - u64End = RTTimeSystemNanoTS() + cMillies * 1000000; + ts.tv_nsec = (cMillies % 1000) * UINT32_C(1000000); + u64End = RTTimeSystemNanoTS() + cMillies * UINT64_C(1000000); pTimeout = &ts; } @@ -238,8 +238,8 @@ static int rtsemMutexRequest(RTSEMMUTEX MutexSem, unsigned cMillies, bool fAutoR rc = VERR_TIMEOUT; break; } - ts.tv_sec = i64Diff / 1000000000; - ts.tv_nsec = i64Diff % 1000000000; + ts.tv_sec = (uint64_t)i64Diff / UINT32_C(1000000000); + ts.tv_nsec = (uint64_t)i64Diff % UINT32_C(1000000000); } } diff --git a/src/VBox/Runtime/r3/posix/semeventmulti-posix.cpp b/src/VBox/Runtime/r3/posix/semeventmulti-posix.cpp index cf446f83c..006152ee6 100644 --- a/src/VBox/Runtime/r3/posix/semeventmulti-posix.cpp +++ b/src/VBox/Runtime/r3/posix/semeventmulti-posix.cpp @@ -412,7 +412,6 @@ static int rtSemEventMultiWait(RTSEMEVENTMULTI EventMultiSem, unsigned cMillies, /* check state. */ if (pThis->u32State == EVENTMULTI_STATE_SIGNALED) { - ASMAtomicXchgU32(&pThis->u32State, EVENTMULTI_STATE_NOT_SIGNALED); ASMAtomicDecU32(&pThis->cWaiters); rc = pthread_mutex_unlock(&pThis->Mutex); AssertMsg(!rc, ("Failed to unlock event multi sem %p, rc=%d.\n", EventMultiSem, rc)); NOREF(rc); diff --git a/src/VBox/VMM/CPUM.cpp b/src/VBox/VMM/CPUM.cpp index 6cea217ed..c1ba167a5 100644 --- a/src/VBox/VMM/CPUM.cpp +++ b/src/VBox/VMM/CPUM.cpp @@ -103,7 +103,9 @@ static CPUMCPUVENDOR cpumR3DetectVendor(uint32_t uEAX, uint32_t uEBX, uint32_t u static int cpumR3CpuIdInit(PVM pVM); static DECLCALLBACK(int) cpumR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass); static DECLCALLBACK(int) cpumR3SaveExec(PVM pVM, PSSMHANDLE pSSM); +static DECLCALLBACK(int) cpumR3LoadPrep(PVM pVM, PSSMHANDLE pSSM); static DECLCALLBACK(int) cpumR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass); +static DECLCALLBACK(int) cpumR3LoadDone(PVM pVM, PSSMHANDLE pSSM); static DECLCALLBACK(void) cpumR3InfoAll(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); static DECLCALLBACK(void) cpumR3InfoGuest(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); static DECLCALLBACK(void) cpumR3InfoGuestInstr(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); @@ -213,7 +215,7 @@ VMMR3DECL(int) CPUMR3Init(PVM pVM) int rc = SSMR3RegisterInternal(pVM, "cpum", 1, CPUM_SAVED_STATE_VERSION, sizeof(CPUM), NULL, cpumR3LiveExec, NULL, NULL, cpumR3SaveExec, NULL, - NULL, cpumR3LoadExec, NULL); + cpumR3LoadPrep, cpumR3LoadExec, cpumR3LoadDone); if (RT_FAILURE(rc)) return rc; @@ -1074,16 +1076,16 @@ static int cpumR3LoadCpuId(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion) if (fStrictCpuIdChecks) \ return SSMR3SetLoadError(pSSM, VERR_SSM_LOAD_CPUID_MISMATCH, RT_SRC_POS, \ N_(#bit " mismatch: host=%d saved=%d"), \ - aHostRaw##set [1].reg & (bit), aRaw##set [1].reg & (bit) ); \ + !!(aHostRaw##set [1].reg & (bit)), !!(aRaw##set [1].reg & (bit)) ); \ LogRel(("CPUM: " #bit" differs: host=%d saved=%d\n", \ - aHostRaw##set [1].reg & (bit), aRaw##set [1].reg & (bit) )); \ + !!(aHostRaw##set [1].reg & (bit)), !!(aRaw##set [1].reg & (bit)) )); \ } \ } while (0) #define CPUID_RAW_FEATURE_WRN(set, reg, bit) \ do { \ if ((aHostRaw##set [1].reg & bit) != (aRaw##set [1].reg & bit)) \ LogRel(("CPUM: " #bit" differs: host=%d saved=%d\n", \ - aHostRaw##set [1].reg & (bit), aRaw##set [1].reg & (bit) )); \ + !!(aHostRaw##set [1].reg & (bit)), !!(aRaw##set [1].reg & (bit)) )); \ } while (0) #define CPUID_RAW_FEATURE_IGN(set, reg, bit) do { } while (0) @@ -1304,7 +1306,7 @@ static int cpumR3LoadCpuId(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion) * This can be skipped. */ bool fStrictCpuIdChecks; - CFGMR3QueryBoolDef(CFGMR3GetChild(CFGMR3GetRoot(pVM), "CPUM"), "StrictCpuIdChecks", &fStrictCpuIdChecks, false); + CFGMR3QueryBoolDef(CFGMR3GetChild(CFGMR3GetRoot(pVM), "CPUM"), "StrictCpuIdChecks", &fStrictCpuIdChecks, true); @@ -1866,13 +1868,17 @@ static void cpumR3LoadCPUM1_6(PVM pVM, CPUMCTX_VER1_6 *pCpumctx16) /** - * Execute state load operation. - * - * @returns VBox status code. - * @param pVM VM Handle. - * @param pSSM SSM operation handle. - * @param uVersion Data layout version. - * @param uPass The data pass. + * @copydoc FNSSMINTLOADPREP + */ +static DECLCALLBACK(int) cpumR3LoadPrep(PVM pVM, PSSMHANDLE pSSM) +{ + pVM->cpum.s.fPendingRestore = true; + return VINF_SUCCESS; +} + + +/** + * @copydoc FNSSMINTLOADEXEC */ static DECLCALLBACK(int) cpumR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass) { @@ -1951,6 +1957,8 @@ static DECLCALLBACK(int) cpumR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVers } } + pVM->cpum.s.fPendingRestore = false; + /* * Guest CPUIDs. */ @@ -2071,6 +2079,37 @@ static DECLCALLBACK(int) cpumR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVers } +/** + * @copydoc FNSSMINTLOADPREP + */ +static DECLCALLBACK(int) cpumR3LoadDone(PVM pVM, PSSMHANDLE pSSM) +{ + if (RT_FAILURE(SSMR3HandleGetStatus(pSSM))) + return VINF_SUCCESS; + + /* just check this since we can. */ /** @todo Add a SSM unit flag for indicating that it's mandatory during a restore. */ + if (pVM->cpum.s.fPendingRestore) + { + LogRel(("CPUM: Missing state!\n")); + return VERR_INTERNAL_ERROR_2; + } + + return VINF_SUCCESS; +} + + +/** + * Checks if the CPUM state restore is still pending. + * + * @returns true / false. + * @param pVM The VM handle. + */ +VMMDECL(bool) CPUMR3IsStateRestorePending(PVM pVM) +{ + return pVM->cpum.s.fPendingRestore; +} + + /** * Formats the EFLAGS value into mnemonics. * @@ -3461,7 +3500,7 @@ VMMR3DECL(void) CPUMR3DisasmInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, RTGCPTR */ VMMR3DECL(void) CPUMR3SaveEntryCtx(PVM pVM) { - /* @todo SMP support!! */ + /** @todo SMP support!! */ pVM->cpum.s.GuestEntry = *CPUMQueryGuestCtxPtr(VMMGetCpu(pVM)); } diff --git a/src/VBox/VMM/CPUMInternal.h b/src/VBox/VMM/CPUMInternal.h index 293090e95..1b5e84c30 100644 --- a/src/VBox/VMM/CPUMInternal.h +++ b/src/VBox/VMM/CPUMInternal.h @@ -301,7 +301,10 @@ typedef struct CPUM bool fRawEntered; /** Synthetic CPU type? */ bool fSyntheticCpu; - uint8_t abPadding[2 + (HC_ARCH_BITS == 64) * 4]; + /** Indiciates that a state restore is pending. + * This is used to verify load order dependencies (PGM). */ + bool fPendingRestore; + uint8_t abPadding[1 + (HC_ARCH_BITS == 64) * 4]; /** The standard set of CpuId leafs. */ CPUMCPUID aGuestCpuIdStd[6]; diff --git a/src/VBox/VMM/CPUMInternal.mac b/src/VBox/VMM/CPUMInternal.mac index 111223d1f..5be8c57f5 100644 --- a/src/VBox/VMM/CPUMInternal.mac +++ b/src/VBox/VMM/CPUMInternal.mac @@ -72,10 +72,11 @@ struc CPUM ; entered rawmode? .fRawEntered resb 1 .fSyntheticCpu resb 1 + .fPendingRestore resb 1 %if RTHCPTR_CB == 8 - .abPadding resb 6 + .abPadding resb 5 %else - .abPadding resb 2 + .abPadding resb 1 %endif ; CPUID leafs diff --git a/src/VBox/VMM/EM.cpp b/src/VBox/VMM/EM.cpp index cb08c956f..f14a27835 100644 --- a/src/VBox/VMM/EM.cpp +++ b/src/VBox/VMM/EM.cpp @@ -88,7 +88,6 @@ static const char *emR3GetStateName(EMSTATE enmState); static int emR3Debug(PVM pVM, PVMCPU pVCpu, int rc); static int emR3RemStep(PVM pVM, PVMCPU pVCpu); static int emR3RemExecute(PVM pVM, PVMCPU pVCpu, bool *pfFFDone); -DECLINLINE(int) emR3RawExecuteInstruction(PVM pVM, PVMCPU pVCpu, const char *pszPrefix, int rcGC = VINF_SUCCESS); int emR3HighPriorityPostForcedActions(PVM pVM, PVMCPU pVCpu, int rc); @@ -381,7 +380,6 @@ VMMR3DECL(int) EMR3Init(PVM pVM) /* these should be considered for release statistics. */ EM_REG_COUNTER(&pVCpu->em.s.StatIOEmu, "/PROF/CPU%d/EM/Emulation/IO", "Profiling of emR3RawExecuteIOInstruction."); EM_REG_COUNTER(&pVCpu->em.s.StatPrivEmu, "/PROF/CPU%d/EM/Emulation/Priv", "Profiling of emR3RawPrivileged."); - EM_REG_COUNTER(&pVCpu->em.s.StatMiscEmu, "/PROF/CPU%d/EM/Emulation/Misc", "Profiling of emR3RawExecuteInstruction."); EM_REG_PROFILE(&pVCpu->em.s.StatHwAccEntry, "/PROF/CPU%d/EM/HwAccEnter", "Profiling Hardware Accelerated Mode entry overhead."); EM_REG_PROFILE(&pVCpu->em.s.StatHwAccExec, "/PROF/CPU%d/EM/HwAccExec", "Profiling Hardware Accelerated Mode execution."); EM_REG_PROFILE(&pVCpu->em.s.StatREMEmu, "/PROF/CPU%d/EM/REMEmuSingle", "Profiling single instruction REM execution."); @@ -849,6 +847,25 @@ static int emR3RemStep(PVM pVM, PVMCPU pVCpu) } +/** + * emR3RemExecute helper that syncs the state back from REM and leave the REM + * critical section. + * + * @returns false - new fInREMState value. + * @param pVM The VM handle. + * @param pVCpu The virtual CPU handle. + */ +DECLINLINE(bool) emR3RemExecuteSyncBack(PVM pVM, PVMCPU pVCpu) +{ + STAM_PROFILE_START(&pVCpu->em.s.StatREMSync, a); + REMR3StateBack(pVM, pVCpu); + STAM_PROFILE_STOP(&pVCpu->em.s.StatREMSync, a); + + EMRemUnlock(pVM); + return false; +} + + /** * Executes recompiled code. * @@ -883,35 +900,37 @@ static int emR3RemExecute(PVM pVM, PVMCPU pVCpu, bool *pfFFDone) ("cs:eip=%RX16:%RX32\n", CPUMGetGuestCS(pVCpu), CPUMGetGuestEIP(pVCpu))); #endif - /* Big lock, but you are not supposed to own any lock when coming in here. */ - EMRemLock(pVM); - /* * Spin till we get a forced action which returns anything but VINF_SUCCESS * or the REM suggests raw-mode execution. */ *pfFFDone = false; bool fInREMState = false; - int rc = VINF_SUCCESS; - - /* Flush the recompiler TLB if the VCPU has changed. */ - if (pVM->em.s.idLastRemCpu != pVCpu->idCpu) - { - REMFlushTBs(pVM); - /* Also sync the entire state. */ - CPUMSetChangedFlags(pVCpu, CPUM_CHANGED_ALL); - } - pVM->em.s.idLastRemCpu = pVCpu->idCpu; - + int rc = VINF_SUCCESS; for (;;) { /* - * Update REM state if not already in sync. + * Lock REM and update the state if not already in sync. + * + * Note! Big lock, but you are not supposed to own any lock when + * coming in here. */ if (!fInREMState) { + EMRemLock(pVM); STAM_PROFILE_START(&pVCpu->em.s.StatREMSync, b); + + /* Flush the recompiler translation blocks if the VCPU has changed, + also force a full CPU state resync. */ + if (pVM->em.s.idLastRemCpu != pVCpu->idCpu) + { + REMFlushTBs(pVM); + CPUMSetChangedFlags(pVCpu, CPUM_CHANGED_ALL); + } + pVM->em.s.idLastRemCpu = pVCpu->idCpu; + rc = REMR3State(pVM, pVCpu); + STAM_PROFILE_STOP(&pVCpu->em.s.StatREMSync, b); if (RT_FAILURE(rc)) break; @@ -939,15 +958,18 @@ static int emR3RemExecute(PVM pVM, PVMCPU pVCpu, bool *pfFFDone) /* - * Deal with high priority post execution FFs before doing anything else. + * Deal with high priority post execution FFs before doing anything + * else. Sync back the state and leave the lock to be on the safe side. */ if ( VM_FF_ISPENDING(pVM, VM_FF_HIGH_PRIORITY_POST_MASK) || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HIGH_PRIORITY_POST_MASK)) + { + fInREMState = emR3RemExecuteSyncBack(pVM, pVCpu); rc = emR3HighPriorityPostForcedActions(pVM, pVCpu, rc); + } /* * Process the returned status code. - * (Try keep this short! Call functions!) */ if (rc != VINF_SUCCESS) { @@ -967,7 +989,9 @@ static int emR3RemExecute(PVM pVM, PVMCPU pVCpu, bool *pfFFDone) /* * Check and execute forced actions. - * Sync back the VM state before calling any of these. + * + * Sync back the VM state and leave the lock before calling any of + * these, you never know what's going to happen here. */ #ifdef VBOX_HIGH_RES_TIMERS_HACK TMTimerPollVoid(pVM, pVCpu); @@ -978,12 +1002,7 @@ static int emR3RemExecute(PVM pVM, PVMCPU pVCpu, bool *pfFFDone) { l_REMDoForcedActions: if (fInREMState) - { - STAM_PROFILE_START(&pVCpu->em.s.StatREMSync, d); - REMR3StateBack(pVM, pVCpu); - STAM_PROFILE_STOP(&pVCpu->em.s.StatREMSync, d); - fInREMState = false; - } + fInREMState = emR3RemExecuteSyncBack(pVM, pVCpu); STAM_REL_PROFILE_ADV_SUSPEND(&pVCpu->em.s.StatREMTotal, a); rc = emR3ForcedActions(pVM, pVCpu, rc); STAM_REL_PROFILE_ADV_RESUME(&pVCpu->em.s.StatREMTotal, a); @@ -1002,12 +1021,7 @@ l_REMDoForcedActions: * Returning. Sync back the VM state if required. */ if (fInREMState) - { - STAM_PROFILE_START(&pVCpu->em.s.StatREMSync, e); - REMR3StateBack(pVM, pVCpu); - STAM_PROFILE_STOP(&pVCpu->em.s.StatREMSync, e); - } - EMRemUnlock(pVM); + fInREMState = emR3RemExecuteSyncBack(pVM, pVCpu); STAM_REL_PROFILE_ADV_STOP(&pVCpu->em.s.StatREMTotal, a); return rc; diff --git a/src/VBox/VMM/EMHandleRCTmpl.h b/src/VBox/VMM/EMHandleRCTmpl.h index f710a0472..99c9f33fc 100644 --- a/src/VBox/VMM/EMHandleRCTmpl.h +++ b/src/VBox/VMM/EMHandleRCTmpl.h @@ -147,6 +147,16 @@ int emR3HwaccmHandleRC(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rc) rc = VINF_SUCCESS; break; + /* + * PGM pool flush pending (guest SMP only) + * + * Todo: jumping back and forth between ring 0 and 3 can burn a lot of cycles if the EMT thread that's supposed to handle + * the flush is currently not active (e.g. waiting to be scheduled) -> fix this properly! + */ + case VINF_PGM_POOL_FLUSH_PENDING: + rc = VINF_SUCCESS; + break; + /* * Paging mode change. */ diff --git a/src/VBox/VMM/EMInternal.h b/src/VBox/VMM/EMInternal.h index ac07d4ad9..c938d6c14 100644 --- a/src/VBox/VMM/EMInternal.h +++ b/src/VBox/VMM/EMInternal.h @@ -379,8 +379,6 @@ typedef struct EMCPU STAMPROFILE StatIOEmu; /** R3: Profiling of emR3RawPrivileged. */ STAMPROFILE StatPrivEmu; - /** R3: Profiling of emR3RawExecuteInstruction. */ - STAMPROFILE StatMiscEmu; /** R3: Number of time emR3HwAccExecute is called. */ STAMCOUNTER StatHwAccExecuteEntry; diff --git a/src/VBox/VMM/HWACCM.cpp b/src/VBox/VMM/HWACCM.cpp index 3211ebd0b..423785332 100644 --- a/src/VBox/VMM/HWACCM.cpp +++ b/src/VBox/VMM/HWACCM.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include /******************************************************************************* @@ -652,13 +653,42 @@ VMMR3DECL(int) HWACCMR3InitFinalizeR0(PVM pVM) { int rc; + /* Hack to allow users to work around broken BIOSes that incorrectly set EFER.SVME, which makes us believe somebody else + * is already using AMD-V. + */ + if ( !pVM->hwaccm.s.vmx.fSupported + && !pVM->hwaccm.s.svm.fSupported + && pVM->hwaccm.s.lLastError == VERR_SVM_IN_USE /* implies functional AMD-V */ + && RTEnvGet("VBOX_HWVIRTEX_IGNORE_SVM_IN_USE")) + { + LogRel(("HWACCM: VBOX_HWVIRTEX_IGNORE_SVM_IN_USE active!\n")); + pVM->hwaccm.s.svm.fSupported = true; + pVM->hwaccm.s.svm.fIgnoreInUseError = true; + } + else if ( !pVM->hwaccm.s.vmx.fSupported && !pVM->hwaccm.s.svm.fSupported) { LogRel(("HWACCM: No VT-x or AMD-V CPU extension found. Reason %Rrc\n", pVM->hwaccm.s.lLastError)); LogRel(("HWACCM: VMX MSR_IA32_FEATURE_CONTROL=%RX64\n", pVM->hwaccm.s.vmx.msr.feature_ctrl)); if (VMMIsHwVirtExtForced(pVM)) - return VM_SET_ERROR(pVM, VERR_VMX_NO_VMX, "VT-x is not available."); + { + switch (pVM->hwaccm.s.lLastError) + { + case VERR_VMX_NO_VMX: + return VM_SET_ERROR(pVM, VERR_VMX_NO_VMX, "VT-x is not available."); + case VERR_VMX_IN_VMX_ROOT_MODE: + return VM_SET_ERROR(pVM, VERR_VMX_IN_VMX_ROOT_MODE, "VT-x is being used by another hypervisor."); + case VERR_SVM_IN_USE: + return VM_SET_ERROR(pVM, VERR_SVM_IN_USE, "AMD-V is being used by another hypervisor."); + case VERR_SVM_NO_SVM: + return VM_SET_ERROR(pVM, VERR_SVM_NO_SVM, "AMD-V is not available."); + case VERR_SVM_DISABLED: + return VM_SET_ERROR(pVM, VERR_SVM_DISABLED, "AMD-V is disabled in the BIOS."); + default: + return pVM->hwaccm.s.lLastError; + } + } return VINF_SUCCESS; } @@ -1097,6 +1127,13 @@ VMMR3DECL(int) HWACCMR3InitFinalizeR0(PVM pVM) CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_LAHF); CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_NXE); } + else + /* Turn on NXE if PAE has been enabled *and* the host has turned on NXE (we reuse the host EFER in the switcher) */ + /* Todo: this needs to be fixed properly!! */ + if ( CPUMGetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_PAE) + && (pVM->hwaccm.s.vmx.hostEFER & MSR_K6_EFER_NXE)) + CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_NXE); + LogRel((pVM->hwaccm.s.fAllow64BitGuests ? "HWACCM: 32-bit and 64-bit guests supported.\n" : "HWACCM: 32-bit guests supported.\n")); @@ -1237,6 +1274,10 @@ VMMR3DECL(int) HWACCMR3InitFinalizeR0(PVM pVM) CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_NXE); CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_LAHF); } + else + /* Turn on NXE if PAE has been enabled. */ + if (CPUMGetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_PAE)) + CPUMSetGuestCpuIdFeature(pVM, CPUMCPUIDFEATURE_NXE); #endif LogRel((pVM->hwaccm.s.fAllow64BitGuests ? "HWACCM: 32-bit and 64-bit guest supported.\n" diff --git a/src/VBox/VMM/HWACCMInternal.h b/src/VBox/VMM/HWACCMInternal.h index 055b2ab41..5c436ba32 100644 --- a/src/VBox/VMM/HWACCMInternal.h +++ b/src/VBox/VMM/HWACCMInternal.h @@ -173,6 +173,9 @@ typedef struct /** Configured for VT-x or AMD-V. */ bool fConfigured; + /** Set if the VBOX_HWVIRTEX_IGNORE_SVM_IN_USE hack is active. */ + bool fIgnoreAMDVInUseError; + /** In use by our code. (for power suspend) */ volatile bool fInUse; } HWACCM_CPUINFO; @@ -373,6 +376,9 @@ typedef struct HWACCM /** Host CR4 value (set by ring-0 VMX init) */ uint64_t hostCR4; + /** Host EFER value (set by ring-0 VMX init) */ + uint64_t hostEFER; + /** VMX MSR values */ struct { @@ -405,7 +411,8 @@ typedef struct HWACCM bool fEnabled; /** Set if erratum 170 affects the AMD cpu. */ bool fAlwaysFlushTLB; - bool u8Alignment; + /** Set when the hack to ignore VERR_SVM_IN_USE is active. */ + bool fIgnoreInUseError; /** R0 memory object for the IO bitmap (12kb). */ RTR0MEMOBJ pMemObjIOBitmap; diff --git a/src/VBox/VMM/PATM/PATM.cpp b/src/VBox/VMM/PATM/PATM.cpp index 531251811..8a449b0ef 100644 --- a/src/VBox/VMM/PATM/PATM.cpp +++ b/src/VBox/VMM/PATM/PATM.cpp @@ -5952,6 +5952,49 @@ static int patmR3HandleDirtyInstr(PVM pVM, PCPUMCTX pCtx, PPATMPATCHREC pPatch, pCurPatchInstrHC += CpuNew.opsize; pCurPatchInstrGC += CpuNew.opsize; cbLeft -= CpuNew.opsize; + + /* Check if we expanded a complex guest instruction into a patch stream (e.g. call) */ + if (!cbLeft) + { + /* If the next patch instruction doesn't correspond to the next guest instruction, then we have some extra room to fill. */ + if (RTAvlU32Get(&pPatch->patch.Patch2GuestAddrTree, pCurPatchInstrGC - pVM->patm.s.pPatchMemGC) == NULL) + { + pRec = (PRECPATCHTOGUEST)RTAvlU32GetBestFit(&pPatch->patch.Patch2GuestAddrTree, pCurPatchInstrGC - pVM->patm.s.pPatchMemGC, true); + if (pRec) + { + unsigned cbFiller = pRec->Core.Key + pVM->patm.s.pPatchMemGC - pCurPatchInstrGC; + uint8_t *pPatchFillHC = patmPatchGCPtr2PatchHCPtr(pVM, pCurPatchInstrGC); + + Assert(!pRec->fDirty); + + Log(("Room left in patched instruction stream (%d bytes)\n", cbFiller)); + if (cbFiller >= SIZEOF_NEARJUMP32) + { + pPatchFillHC[0] = 0xE9; + *(uint32_t *)&pPatchFillHC[1] = cbFiller - SIZEOF_NEARJUMP32; +#ifdef DEBUG + char szBuf[256]; + szBuf[0] = '\0'; + DBGFR3DisasInstrEx(pVM, pVCpu->idCpu, pCtx->cs, pCurPatchInstrGC, 0, szBuf, sizeof(szBuf), NULL); + Log(("FILL: %s\n", szBuf)); +#endif + } + else + { + for (unsigned i = 0; i < cbFiller; i++) + { + pPatchFillHC[i] = 0x90; /* NOP */ +#ifdef DEBUG + char szBuf[256]; + szBuf[0] = '\0'; + DBGFR3DisasInstrEx(pVM, pVCpu->idCpu, pCtx->cs, pCurPatchInstrGC, 0, szBuf, sizeof(szBuf), NULL); + Log(("FILL: %s\n", szBuf)); +#endif + } + } + } + } + } } } else diff --git a/src/VBox/VMM/PATM/PATMSSM.cpp b/src/VBox/VMM/PATM/PATMSSM.cpp index d395b0dee..c6d2c94d2 100644 --- a/src/VBox/VMM/PATM/PATMSSM.cpp +++ b/src/VBox/VMM/PATM/PATMSSM.cpp @@ -1148,17 +1148,21 @@ static void patmCorrectFixup(PVM pVM, unsigned ulSSMVersion, PATM &patmInfo, PPA *pFixup = (*pFixup - patmInfo.pPatchMemGC) + pVM->patm.s.pPatchMemGC; } else + /* Boldly ASSUMES: + * 1. That pCPUMCtxGC is in the VM structure and that its location is + * at the first page of the same 4 MB chunk. + * 2. That the forced actions were in the first 32 bytes of the VM + * structure. + * 3. That the CPUM leafs are less than 8KB into the structure. */ if ( ulSSMVersion <= PATM_SSM_VERSION_FIXUP_HACK - && *pFixup >= pVM->pVMRC - && *pFixup < pVM->pVMRC + 32) + && *pFixup - (patmInfo.pCPUMCtxGC & UINT32_C(0xffc00000)) < UINT32_C(32)) { - LogFlow(("Changing fLocalForcedActions fixup from %x to %x\n", *pFixup, pVM->pVMRC + RT_OFFSETOF(VM, aCpus[0].fLocalForcedActions))); + LogFlow(("Changing fLocalForcedActions fixup from %RRv to %RRv\n", *pFixup, pVM->pVMRC + RT_OFFSETOF(VM, aCpus[0].fLocalForcedActions))); *pFixup = pVM->pVMRC + RT_OFFSETOF(VM, aCpus[0].fLocalForcedActions); } else if ( ulSSMVersion <= PATM_SSM_VERSION_FIXUP_HACK - && *pFixup >= pVM->pVMRC - && *pFixup < pVM->pVMRC + 8192) + && *pFixup - (patmInfo.pCPUMCtxGC & UINT32_C(0xffc00000)) < UINT32_C(8192)) { static int cCpuidFixup = 0; #ifdef LOG_ENABLED @@ -1180,7 +1184,7 @@ static void patmCorrectFixup(PVM pVM, unsigned ulSSMVersion, PATM &patmInfo, PPA *pFixup = CPUMR3GetGuestCpuIdCentaurRCPtr(pVM); break; } - LogFlow(("Changing cpuid fixup %d from %x to %x\n", cCpuidFixup, oldFixup, *pFixup)); + LogFlow(("Changing cpuid fixup %d from %RRv to %RRv\n", cCpuidFixup, oldFixup, *pFixup)); cCpuidFixup++; } else diff --git a/src/VBox/VMM/PGM.cpp b/src/VBox/VMM/PGM.cpp index bcd1d9c81..a8012130e 100644 --- a/src/VBox/VMM/PGM.cpp +++ b/src/VBox/VMM/PGM.cpp @@ -637,7 +637,6 @@ static PGMMODE pgmR3CalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUP #ifdef VBOX_WITH_DEBUGGER /** @todo Convert the first two commands to 'info' items. */ static DECLCALLBACK(int) pgmR3CmdRam(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult); -static DECLCALLBACK(int) pgmR3CmdMap(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult); static DECLCALLBACK(int) pgmR3CmdError(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult); static DECLCALLBACK(int) pgmR3CmdSync(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult); static DECLCALLBACK(int) pgmR3CmdSyncAlways(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult); @@ -671,7 +670,6 @@ static const DBGCCMD g_aCmds[] = { /* pszCmd, cArgsMin, cArgsMax, paArgDesc, cArgDescs, pResultDesc, fFlags, pfnHandler pszSyntax, ....pszDescription */ { "pgmram", 0, 0, NULL, 0, NULL, 0, pgmR3CmdRam, "", "Display the ram ranges." }, - { "pgmmap", 0, 0, NULL, 0, NULL, 0, pgmR3CmdMap, "", "Display the mapping ranges." }, { "pgmsync", 0, 0, NULL, 0, NULL, 0, pgmR3CmdSync, "", "Sync the CR3 page." }, { "pgmerror", 0, 1, &g_aPgmErrorArgs[0], 1, NULL, 0, pgmR3CmdError, "", "Enables inject runtime of errors into parts of PGM." }, { "pgmerroroff", 0, 1, &g_aPgmErrorArgs[0], 1, NULL, 0, pgmR3CmdError, "", "Disables inject runtime errors into parts of PGM." }, @@ -2193,11 +2191,13 @@ VMMR3DECL(void) PGMR3Reset(PVM pVM) /* * Unfix any fixed mappings and disable CR3 monitoring. */ - pVM->pgm.s.fMappingsFixed = false; - pVM->pgm.s.GCPtrMappingFixed = 0; - pVM->pgm.s.cbMappingFixed = 0; + pVM->pgm.s.fMappingsFixed = false; + pVM->pgm.s.fMappingsFixedRestored = false; + pVM->pgm.s.GCPtrMappingFixed = NIL_RTGCPTR; + pVM->pgm.s.cbMappingFixed = 0; - /* Exit the guest paging mode before the pgm pool gets reset. + /* + * Exit the guest paging mode before the pgm pool gets reset. * Important to clean up the amd64 case. */ for (VMCPUID i = 0; i < pVM->cCpus; i++) @@ -4002,50 +4002,6 @@ static DECLCALLBACK(int) pgmR3CmdRam(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pV } -/** - * The '.pgmmap' command. - * - * @returns VBox status. - * @param pCmd Pointer to the command descriptor (as registered). - * @param pCmdHlp Pointer to command helper functions. - * @param pVM Pointer to the current VM (if any). - * @param paArgs Pointer to (readonly) array of arguments. - * @param cArgs Number of arguments in the array. - */ -static DECLCALLBACK(int) pgmR3CmdMap(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PVM pVM, PCDBGCVAR paArgs, unsigned cArgs, PDBGCVAR pResult) -{ - /* - * Validate input. - */ - if (!pVM) - return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "error: The command requires a VM to be selected.\n"); - if (!pVM->pgm.s.pMappingsR3) - return pCmdHlp->pfnPrintf(pCmdHlp, NULL, "Sorry, no mappings are registered.\n"); - - /* - * Print message about the fixedness of the mappings. - */ - int rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, pVM->pgm.s.fMappingsFixed ? "The mappings are FIXED.\n" : "The mappings are FLOATING.\n"); - if (RT_FAILURE(rc)) - return rc; - - /* - * Dump the ranges. - */ - PPGMMAPPING pCur; - for (pCur = pVM->pgm.s.pMappingsR3; pCur; pCur = pCur->pNextR3) - { - rc = pCmdHlp->pfnPrintf(pCmdHlp, NULL, - "%08x - %08x %s\n", - pCur->GCPtr, pCur->GCPtrLast, pCur->pszDesc); - if (RT_FAILURE(rc)) - return rc; - } - - return VINF_SUCCESS; -} - - /** * The '.pgmerror' and '.pgmerroroff' commands. * diff --git a/src/VBox/VMM/PGMInternal.h b/src/VBox/VMM/PGMInternal.h index f1ddde580..f7004e7da 100644 --- a/src/VBox/VMM/PGMInternal.h +++ b/src/VBox/VMM/PGMInternal.h @@ -55,6 +55,14 @@ * @{ */ +/** + * Indicates that there are no guest mappings to care about. + * Currently on raw-mode related code uses mappings, i.e. RC and R3 code. + */ +#ifdef IN_RING0 +# define PGM_WITHOUT_MAPPINGS +#endif + /** * Solve page is out of sync issues inside Guest Context (in PGMGC.cpp). * Comment it if it will break something. @@ -2581,13 +2589,19 @@ typedef struct PGM /** Indicates that PGMR3FinalizeMappings has been called and that further * PGMR3MapIntermediate calls will be rejected. */ bool fFinalizedMappings; - /** If set no conflict checks are required. (boolean) */ + /** If set no conflict checks are required. */ bool fMappingsFixed; - /** If set, then no mappings are put into the shadow page table. (boolean) */ - bool fDisableMappings; - /** Size of fixed mapping */ + /** If set if restored as fixed but we were unable to re-fixate at the old + * location because of room or address incompatibilities. */ + bool fMappingsFixedRestored; + /** If set, then no mappings are put into the shadow page table. + * Use pgmMapAreMappingsEnabled() instead of direct access. */ + bool fMappingsDisabled; + /** Size of fixed mapping. + * This is valid if either fMappingsFixed or fMappingsFixedRestored is set. */ uint32_t cbMappingFixed; - /** Base address (GC) of fixed mapping */ + /** Base address (GC) of fixed mapping. + * This is valid if either fMappingsFixed or fMappingsFixedRestored is set. */ RTGCPTR GCPtrMappingFixed; /** The address of the previous RAM range mapping. */ RTGCPTR GCPtrPrevRamRangeMapping; @@ -3310,10 +3324,11 @@ RT_C_DECLS_BEGIN int pgmLock(PVM pVM); void pgmUnlock(PVM pVM); +int pgmR3MappingsFixInternal(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb); int pgmR3SyncPTResolveConflict(PVM pVM, PPGMMAPPING pMapping, PX86PD pPDSrc, RTGCPTR GCPtrOldMapping); int pgmR3SyncPTResolveConflictPAE(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping); PPGMMAPPING pgmGetMapping(PVM pVM, RTGCPTR GCPtr); -void pgmR3MapRelocate(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping, RTGCPTR GCPtrNewMapping); +int pgmMapResolveConflicts(PVM pVM); DECLCALLBACK(void) pgmR3MapInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs); void pgmR3HandlerPhysicalUpdateAll(PVM pVM); @@ -4961,20 +4976,40 @@ DECLINLINE(bool) pgmPoolIsPageLocked(PPGM pPGM, PPGMPOOLPAGE pPage) return false; } + /** - * Tells if mappings are to be put into the shadow page table or not + * Tells if mappings are to be put into the shadow page table or not. * * @returns boolean result * @param pVM VM handle. */ -DECLINLINE(bool) pgmMapAreMappingsEnabled(PPGM pPGM) +DECL_FORCE_INLINE(bool) pgmMapAreMappingsEnabled(PPGM pPGM) { -#ifdef IN_RING0 +#ifdef PGM_WITHOUT_MAPPINGS + /* There are no mappings in VT-x and AMD-V mode. */ + Assert(pPGM->fMappingsDisabled); + return false; +#else + return !pPGM->fMappingsDisabled; +#endif +} + + +/** + * Checks if the mappings are floating and enabled. + * + * @returns true / false. + * @param pVM The VM handle. + */ +DECL_FORCE_INLINE(bool) pgmMapAreMappingsFloating(PPGM pPGM) +{ +#ifdef PGM_WITHOUT_MAPPINGS /* There are no mappings in VT-x and AMD-V mode. */ - Assert(pPGM->fDisableMappings); + Assert(pPGM->fMappingsDisabled); return false; #else - return !pPGM->fDisableMappings; + return !pPGM->fMappingsDisabled + && !pPGM->fMappingsFixed; #endif } diff --git a/src/VBox/VMM/PGMMap.cpp b/src/VBox/VMM/PGMMap.cpp index 819bf9ea1..d1a513c9f 100644 --- a/src/VBox/VMM/PGMMap.cpp +++ b/src/VBox/VMM/PGMMap.cpp @@ -73,21 +73,12 @@ VMMR3DECL(int) PGMR3MapPT(PVM pVM, RTGCPTR GCPtr, uint32_t cb, uint32_t fFlags, } cb = RT_ALIGN_32(cb, _4M); RTGCPTR GCPtrLast = GCPtr + cb - 1; - if (GCPtrLast < GCPtr) - { - AssertMsgFailed(("Range wraps! GCPtr=%x GCPtrLast=%x\n", GCPtr, GCPtrLast)); - return VERR_INVALID_PARAMETER; - } - if (pVM->pgm.s.fMappingsFixed) - { - AssertMsgFailed(("Mappings are fixed! It's not possible to add new mappings at this time!\n")); - return VERR_PGM_MAPPINGS_FIXED; - } - if (!pfnRelocate) - { - AssertMsgFailed(("Callback is required\n")); - return VERR_INVALID_PARAMETER; - } + + AssertMsgReturn(GCPtrLast >= GCPtr, ("Range wraps! GCPtr=%x GCPtrLast=%x\n", GCPtr, GCPtrLast), + VERR_INVALID_PARAMETER); + AssertMsgReturn(!pVM->pgm.s.fMappingsFixed, ("Mappings are fixed! It's not possible to add new mappings at this time!\n"), + VERR_PGM_MAPPINGS_FIXED); + AssertPtrReturn(pfnRelocate, VERR_INVALID_PARAMETER); /* * Find list location. @@ -141,9 +132,9 @@ VMMR3DECL(int) PGMR3MapPT(PVM pVM, RTGCPTR GCPtr, uint32_t cb, uint32_t fFlags, pNew->GCPtr = GCPtr; pNew->GCPtrLast = GCPtrLast; pNew->cb = cb; - pNew->pszDesc = pszDesc; pNew->pfnRelocate = pfnRelocate; pNew->pvUser = pvUser; + pNew->pszDesc = pszDesc; pNew->cPTs = cPTs; /* @@ -267,7 +258,8 @@ VMMR3DECL(int) PGMR3UnmapPT(PVM pVM, RTGCPTR GCPtr) * and free the page tables and node memory. */ MMHyperFree(pVM, pCur->aPTs[0].pPTR3); - pgmR3MapClearPDEs(pVM, pCur, pCur->GCPtr >> X86_PD_SHIFT); + if (pCur->GCPtr != NIL_RTGCPTR) + pgmR3MapClearPDEs(pVM, pCur, pCur->GCPtr >> X86_PD_SHIFT); MMHyperFree(pVM, pCur); for (VMCPUID i = 0; i < pVM->cCpus; i++) @@ -413,12 +405,14 @@ VMMR3DECL(int) PGMR3FinalizeMappings(PVM pVM) /* * Loop until all mappings have been finalized. */ - /*unsigned iPDNext = UINT32_C(0xc0000000) >> X86_PD_SHIFT;*/ /* makes CSAM/PATM freak out booting linux. :-/ */ #if 0 + unsigned iPDNext = UINT32_C(0xc0000000) >> X86_PD_SHIFT; /* makes CSAM/PATM freak out booting linux. :-/ */ +#elif 0 unsigned iPDNext = MM_HYPER_AREA_ADDRESS >> X86_PD_SHIFT; #else unsigned iPDNext = 1 << X86_PD_SHIFT; /* no hint, map them from the top. */ #endif + PPGMMAPPING pCur; do { @@ -503,7 +497,7 @@ VMMR3DECL(int) PGMR3MappingsSize(PVM pVM, uint32_t *pcb) /** - * Fixes the guest context mappings in a range reserved from the Guest OS. + * Fixates the guest context mappings in a range reserved from the Guest OS. * * @returns VBox status code. * @param pVM The VM. @@ -512,38 +506,56 @@ VMMR3DECL(int) PGMR3MappingsSize(PVM pVM, uint32_t *pcb) */ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) { - Log(("PGMR3MappingsFix: GCPtrBase=%#x cb=%#x\n", GCPtrBase, cb)); - - /* Ignore the additions mapping fix call in VT-x/AMD-V. */ - if ( pVM->pgm.s.fMappingsFixed - && HWACCMIsEnabled(pVM)) - return VINF_SUCCESS; - - /* Only applies to VCPU 0 as we don't support SMP guests with raw mode. */ - Assert(pVM->cCpus == 1); - - PVMCPU pVCpu = &pVM->aCpus[0]; + Log(("PGMR3MappingsFix: GCPtrBase=%RGv cb=%#x (fMappingsFixed=%RTbool fMappingsDisabled=%RTbool)\n", + GCPtrBase, cb, pVM->pgm.s.fMappingsFixed, pVM->pgm.s.fMappingsDisabled)); /* - * This is all or nothing at all. So, a tiny bit of paranoia first. + * Ignore the additions mapping fix call if disabled. */ - if (GCPtrBase & X86_PAGE_4M_OFFSET_MASK) - { - AssertMsgFailed(("GCPtrBase (%#x) has to be aligned on a 4MB address!\n", GCPtrBase)); - return VERR_INVALID_PARAMETER; - } - if (!cb || (cb & X86_PAGE_4M_OFFSET_MASK)) + if (!pgmMapAreMappingsEnabled(&pVM->pgm.s)) { - AssertMsgFailed(("cb (%#x) is 0 or not aligned on a 4MB address!\n", cb)); - return VERR_INVALID_PARAMETER; + Assert(HWACCMIsEnabled(pVM)); + return VINF_SUCCESS; } + /* + * Only applies to VCPU 0 as we don't support SMP guests with raw mode. + */ + Assert(pVM->cCpus == 1); + PVMCPU pVCpu = &pVM->aCpus[0]; + /* * Before we do anything we'll do a forced PD sync to try make sure any * pending relocations because of these mappings have been resolved. */ PGMSyncCR3(pVCpu, CPUMGetGuestCR0(pVCpu), CPUMGetGuestCR3(pVCpu), CPUMGetGuestCR4(pVCpu), true); + return pgmR3MappingsFixInternal(pVM, GCPtrBase, cb); +} + + +/** + * Internal worker for PGMR3MappingsFix and pgmR3Load. + * + * (This does not perform a SyncCR3 before the fixation like PGMR3MappingsFix.) + * + * @returns VBox status code. + * @param pVM The VM. + * @param GCPtrBase The address of the reserved range of guest memory. + * @param cb The size of the range starting at GCPtrBase. + */ +int pgmR3MappingsFixInternal(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) +{ + /* + * Check input arguments and pre-conditions. + */ + AssertMsgReturn(!(GCPtrBase & X86_PAGE_4M_OFFSET_MASK), ("GCPtrBase (%#x) has to be aligned on a 4MB address!\n", GCPtrBase), + VERR_INVALID_PARAMETER); + AssertMsgReturn(cb && !(cb & X86_PAGE_4M_OFFSET_MASK), ("cb (%#x) is 0 or not aligned on a 4MB address!\n", cb), + VERR_INVALID_PARAMETER); + AssertReturn(pgmMapAreMappingsEnabled(&pVM->pgm.s), VERR_INTERNAL_ERROR_3); + AssertReturn(pVM->cCpus == 1, VERR_INTERNAL_ERROR_4); + /* * Check that it's not conflicting with a core code mapping in the intermediate page table. */ @@ -573,6 +585,7 @@ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) /* * In PAE / PAE mode, make sure we don't cross page directories. */ + PVMCPU pVCpu = &pVM->aCpus[0]; if ( ( pVCpu->pgm.s.enmGuestMode == PGMMODE_PAE || pVCpu->pgm.s.enmGuestMode == PGMMODE_PAE_NX) && ( pVCpu->pgm.s.enmShadowMode == PGMMODE_PAE @@ -618,14 +631,14 @@ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) pCur = pVM->pgm.s.pMappingsR3; while (pCur) { - unsigned iPDOld = pCur->GCPtr >> X86_PD_SHIFT; - iPDNew = GCPtrCur >> X86_PD_SHIFT; + RTGCPTR const GCPtrOld = pCur->GCPtr; /* * Relocate the page table(s). */ - pgmR3MapClearPDEs(pVM, pCur, iPDOld); - pgmR3MapSetPDEs(pVM, pCur, iPDNew); + if (pCur->GCPtr != NIL_RTGCPTR) + pgmR3MapClearPDEs(pVM, pCur, GCPtrOld >> X86_PD_SHIFT); + pgmR3MapSetPDEs(pVM, pCur, GCPtrCur >> X86_PD_SHIFT); /* * Update the entry. @@ -636,7 +649,7 @@ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) /* * Callback to execute the relocation. */ - pCur->pfnRelocate(pVM, iPDOld << X86_PD_SHIFT, iPDNew << X86_PD_SHIFT, PGMRELOCATECALL_RELOCATE, pCur->pvUser); + pCur->pfnRelocate(pVM, GCPtrOld, GCPtrCur, PGMRELOCATECALL_RELOCATE, pCur->pvUser); /* * Advance. @@ -646,11 +659,12 @@ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) } /* - * Mark the mappings as fixed and return. + * Mark the mappings as fixed at this new location and return. */ - pVM->pgm.s.fMappingsFixed = true; - pVM->pgm.s.GCPtrMappingFixed = GCPtrBase; - pVM->pgm.s.cbMappingFixed = cb; + pVM->pgm.s.fMappingsFixed = true; + pVM->pgm.s.fMappingsFixedRestored = false; + pVM->pgm.s.GCPtrMappingFixed = GCPtrBase; + pVM->pgm.s.cbMappingFixed = cb; for (VMCPUID i = 0; i < pVM->cCpus; i++) { @@ -661,33 +675,38 @@ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb) return VINF_SUCCESS; } + /** - * Disable the hypervisor mappings in the shadow page tables (doesn't touch the intermediate table!) + * Interface for disabling the guest mappings when switching to HWACCM mode + * during VM creation and VM reset. + * + * (This doesn't touch the intermediate table!) * * @returns VBox status code. * @param pVM The VM. */ VMMR3DECL(int) PGMR3MappingsDisable(PVM pVM) { - uint32_t cb; - int rc = PGMR3MappingsSize(pVM, &cb); - AssertRCReturn(rc, rc); - - /* Only applies to VCPU 0. */ - PVMCPU pVCpu = &pVM->aCpus[0]; + AssertReturn(!pVM->pgm.s.fMappingsFixed, VERR_INTERNAL_ERROR_4); + AssertReturn(!pVM->pgm.s.fMappingsFixedRestored, VERR_INTERNAL_ERROR_4); + if (pVM->pgm.s.fMappingsDisabled) + return VINF_SUCCESS; - pgmLock(pVM); /* to avoid assertions */ - rc = pgmMapDeactivateCR3(pVM, pVCpu->pgm.s.pShwPageCR3R3); - pgmUnlock(pVM); - AssertRCReturn(rc, rc); + /* + * Deactivate (only applies to Virtual CPU #0). + */ + if (pVM->aCpus[0].pgm.s.pShwPageCR3R3) + { + pgmLock(pVM); /* to avoid assertions */ + int rc = pgmMapDeactivateCR3(pVM, pVM->aCpus[0].pgm.s.pShwPageCR3R3); + pgmUnlock(pVM); + AssertRCReturn(rc, rc); + } /* - * Mark the mappings as fixed (using fake values) and disabled. + * Mark the mappings as disabled and trigger a CR3 re-sync. */ - pVM->pgm.s.fDisableMappings = true; - pVM->pgm.s.fMappingsFixed = true; - pVM->pgm.s.GCPtrMappingFixed = MM_HYPER_AREA_ADDRESS; - pVM->pgm.s.cbMappingFixed = cb; + pVM->pgm.s.fMappingsDisabled = true; for (VMCPUID i = 0; i < pVM->cCpus; i++) { PVMCPU pVCpu = &pVM->aCpus[i]; @@ -700,35 +719,55 @@ VMMR3DECL(int) PGMR3MappingsDisable(PVM pVM) /** * Unfixes the mappings. - * After calling this function mapping conflict detection will be enabled. + * + * Unless PGMR3MappingsDisable is in effect, mapping conflict detection will be + * enabled after this call. If the mappings are fixed, a full CR3 resync will + * take place afterwards. * * @returns VBox status code. * @param pVM The VM. */ VMMR3DECL(int) PGMR3MappingsUnfix(PVM pVM) { - Log(("PGMR3MappingsUnfix: fMappingsFixed=%d\n", pVM->pgm.s.fMappingsFixed)); + Log(("PGMR3MappingsUnfix: fMappingsFixed=%RTbool fMappingsDisabled=%RTbool\n", pVM->pgm.s.fMappingsFixed, pVM->pgm.s.fMappingsDisabled)); + if ( pgmMapAreMappingsEnabled(&pVM->pgm.s) + && ( pVM->pgm.s.fMappingsFixed + || pVM->pgm.s.fMappingsFixedRestored) + ) + { + bool const fResyncCR3 = pVM->pgm.s.fMappingsFixed; - /* Ignore in VT-x/AMD-V mode. */ - if (HWACCMIsEnabled(pVM)) - return VINF_SUCCESS; + pVM->pgm.s.fMappingsFixed = false; + pVM->pgm.s.fMappingsFixedRestored = false; + pVM->pgm.s.GCPtrMappingFixed = 0; + pVM->pgm.s.cbMappingFixed = 0; - pVM->pgm.s.fMappingsFixed = false; - pVM->pgm.s.GCPtrMappingFixed = 0; - pVM->pgm.s.cbMappingFixed = 0; - for (VMCPUID i = 0; i < pVM->cCpus; i++) - { - PVMCPU pVCpu = &pVM->aCpus[i]; - VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); + if (fResyncCR3) + for (VMCPUID i = 0; i < pVM->cCpus; i++) + VMCPU_FF_SET(&pVM->aCpus[i], VMCPU_FF_PGM_SYNC_CR3); } return VINF_SUCCESS; } +/** + * Checks if the mappings needs re-fixing after a restore. + * + * @returns true if they need, false if not. + * @param pVM The VM handle. + */ +VMMR3DECL(bool) PGMR3MappingsNeedReFixing(PVM pVM) +{ + VM_ASSERT_VALID_EXT_RETURN(pVM, false); + return pVM->pgm.s.fMappingsFixedRestored; +} + + /** * Map pages into the intermediate context (switcher code). - * These pages are mapped at both the give virtual address and at - * the physical address (for identity mapping). + * + * These pages are mapped at both the give virtual address and at the physical + * address (for identity mapping). * * @returns VBox status code. * @param pVM The virtual machine. @@ -956,6 +995,7 @@ static void pgmR3MapClearPDEs(PVM pVM, PPGMMAPPING pMap, unsigned iOldPDE) * 32-bit. */ pVM->pgm.s.pInterPD->a[iOldPDE].u = 0; + /* * PAE. */ @@ -1029,21 +1069,22 @@ static void pgmR3MapSetPDEs(PVM pVM, PPGMMAPPING pMap, unsigned iNewPDE) * @param pVM VM handle. * @param pMapping The mapping to relocate. * @param GCPtrOldMapping The address of the start of the old mapping. + * NIL_RTGCPTR if not currently mapped. * @param GCPtrNewMapping The address of the start of the new mapping. */ -void pgmR3MapRelocate(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping, RTGCPTR GCPtrNewMapping) +static void pgmR3MapRelocate(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping, RTGCPTR GCPtrNewMapping) { - unsigned iPDOld = GCPtrOldMapping >> X86_PD_SHIFT; - unsigned iPDNew = GCPtrNewMapping >> X86_PD_SHIFT; - Log(("PGM: Relocating %s from %RGv to %RGv\n", pMapping->pszDesc, GCPtrOldMapping, GCPtrNewMapping)); - AssertMsg(((unsigned)iPDOld << X86_PD_SHIFT) == pMapping->GCPtr, ("%RGv vs %RGv\n", (RTGCPTR)((unsigned)iPDOld << X86_PD_SHIFT), pMapping->GCPtr)); + AssertMsg(GCPtrOldMapping == pMapping->GCPtr, ("%RGv vs %RGv\n", GCPtrOldMapping, pMapping->GCPtr)); + AssertMsg((GCPtrOldMapping >> X86_PD_SHIFT) < X86_PG_ENTRIES, ("%RGv\n", GCPtrOldMapping)); + AssertMsg((GCPtrNewMapping >> X86_PD_SHIFT) < X86_PG_ENTRIES, ("%RGv\n", GCPtrOldMapping)); /* * Relocate the page table(s). */ - pgmR3MapClearPDEs(pVM, pMapping, iPDOld); - pgmR3MapSetPDEs(pVM, pMapping, iPDNew); + if (GCPtrOldMapping != NIL_RTGCPTR) + pgmR3MapClearPDEs(pVM, pMapping, GCPtrOldMapping >> X86_PD_SHIFT); + pgmR3MapSetPDEs(pVM, pMapping, GCPtrNewMapping >> X86_PD_SHIFT); /* * Update and resort the mapping list. @@ -1061,7 +1102,7 @@ void pgmR3MapRelocate(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping, RT Assert(pCur); /* Find mapping which >= than pMapping. */ - RTGCPTR GCPtrNew = iPDNew << X86_PD_SHIFT; + RTGCPTR GCPtrNew = GCPtrNewMapping; PPGMMAPPING pPrev = NULL; pCur = pVM->pgm.s.pMappingsR3; while (pCur && pCur->GCPtr < GCPtrNew) @@ -1120,7 +1161,7 @@ void pgmR3MapRelocate(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOldMapping, RT /* * Callback to execute the relocation. */ - pMapping->pfnRelocate(pVM, iPDOld << X86_PD_SHIFT, iPDNew << X86_PD_SHIFT, PGMRELOCATECALL_RELOCATE, pMapping->pvUser); + pMapping->pfnRelocate(pVM, GCPtrOldMapping, GCPtrNewMapping, PGMRELOCATECALL_RELOCATE, pMapping->pvUser); } @@ -1203,7 +1244,7 @@ int pgmR3SyncPTResolveConflict(PVM pVM, PPGMMAPPING pMapping, PX86PD pPDSrc, RTG /* * Ask for the mapping. */ - RTGCPTR GCPtrNewMapping = iPDNew << X86_PD_SHIFT; + RTGCPTR GCPtrNewMapping = (RTGCPTR32)iPDNew << X86_PD_SHIFT; if (pMapping->pfnRelocate(pVM, GCPtrOldMapping, GCPtrNewMapping, PGMRELOCATECALL_SUGGEST, pMapping->pvUser)) { @@ -1291,7 +1332,7 @@ int pgmR3SyncPTResolveConflictPAE(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOl /* * Ask for the mapping. */ - RTGCPTR GCPtrNewMapping = ((RTGCPTR32)iPDPTE << X86_PDPT_SHIFT) + (iPDNew << X86_PD_PAE_SHIFT); + RTGCPTR GCPtrNewMapping = ((RTGCPTR32)iPDPTE << X86_PDPT_SHIFT) + ((RTGCPTR32)iPDNew << X86_PD_PAE_SHIFT); if (pMapping->pfnRelocate(pVM, GCPtrOldMapping, GCPtrNewMapping, PGMRELOCATECALL_SUGGEST, pMapping->pvUser)) { @@ -1401,11 +1442,32 @@ VMMR3DECL(int) PGMR3MapRead(PVM pVM, void *pvDst, RTGCPTR GCPtrSrc, size_t cb) */ DECLCALLBACK(void) pgmR3MapInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs) { - pHlp->pfnPrintf(pHlp, pVM->pgm.s.fMappingsFixed - ? "\nThe mappings are FIXED.\n" - : "\nThe mappings are FLOATING.\n"); + if (pVM->pgm.s.fMappingsDisabled) + pHlp->pfnPrintf(pHlp, "\nThe mappings are DISABLED.\n"); + else if (pVM->pgm.s.fMappingsFixed) + pHlp->pfnPrintf(pHlp, "\nThe mappings are FIXED: %RGv-%RGv\n", + pVM->pgm.s.GCPtrMappingFixed, pVM->pgm.s.GCPtrMappingFixed + pVM->pgm.s.cbMappingFixed - 1); + else if (pVM->pgm.s.fMappingsFixedRestored) + pHlp->pfnPrintf(pHlp, "\nThe mappings are FLOATING-RESTORED-FIXED: %RGv-%RGv\n", + pVM->pgm.s.GCPtrMappingFixed, pVM->pgm.s.GCPtrMappingFixed + pVM->pgm.s.cbMappingFixed - 1); + else + pHlp->pfnPrintf(pHlp, "\nThe mappings are FLOATING.\n"); + PPGMMAPPING pCur; for (pCur = pVM->pgm.s.pMappingsR3; pCur; pCur = pCur->pNextR3) + { pHlp->pfnPrintf(pHlp, "%RGv - %RGv %s\n", pCur->GCPtr, pCur->GCPtrLast, pCur->pszDesc); + if (pCur->cConflicts > 0) + { + pHlp->pfnPrintf(pHlp, " %u conflict%s: ", pCur->cConflicts, pCur->cConflicts == 1 ? "" : "s"); + uint32_t cLeft = RT_MIN(pCur->cConflicts, RT_ELEMENTS(pCur->aGCPtrConflicts)); + uint32_t i = pCur->cConflicts; + while (cLeft-- > 0) + { + i = (i - 1) & (PGMMAPPING_CONFLICT_MAX - 1); + pHlp->pfnPrintf(pHlp, cLeft ? "%RGv, " : "%RGv\n", pCur->aGCPtrConflicts[i]); + } + } + } } diff --git a/src/VBox/VMM/PGMPhys.cpp b/src/VBox/VMM/PGMPhys.cpp index fb0f9c504..7dcdb21a0 100644 --- a/src/VBox/VMM/PGMPhys.cpp +++ b/src/VBox/VMM/PGMPhys.cpp @@ -2233,7 +2233,7 @@ VMMR3DECL(int) PGMR3PhysRomRegister(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhys /* * Update the base memory reservation if necessary. */ - uint32_t cExtraBaseCost = fRamExists ? cPages : 0; + uint32_t cExtraBaseCost = fRamExists ? 0 : cPages; if (fFlags & PGMPHYS_ROM_FLAGS_SHADOWED) cExtraBaseCost += cPages; if (cExtraBaseCost) diff --git a/src/VBox/VMM/PGMPool.cpp b/src/VBox/VMM/PGMPool.cpp index a947f24e5..5f550b237 100644 --- a/src/VBox/VMM/PGMPool.cpp +++ b/src/VBox/VMM/PGMPool.cpp @@ -679,6 +679,7 @@ static DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pV case PGMPOOLKIND_PAE_PT_FOR_PAE_2MB: case PGMPOOLKIND_32BIT_PT_FOR_PHYS: case PGMPOOLKIND_PAE_PT_FOR_PHYS: + case PGMPOOLKIND_EPT_PT_FOR_PHYS: { #ifdef PGMPOOL_WITH_USER_TRACKING if (pPage->cPresent) @@ -775,10 +776,10 @@ static DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pV /* Clear the PGM_SYNC_CLEAR_PGM_POOL flag on all VCPUs to prevent redundant flushes. */ for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) - { - PVMCPU pVCpu = &pVM->aCpus[idCpu]; - pVCpu->pgm.s.fSyncFlags &= ~PGM_SYNC_CLEAR_PGM_POOL; - } + pVM->aCpus[idCpu].pgm.s.fSyncFlags &= ~PGM_SYNC_CLEAR_PGM_POOL; + + /* Flush job finished. */ + VM_FF_CLEAR(pVM, VM_FF_PGM_POOL_FLUSH_PENDING); pPool->cPresent = 0; pgmUnlock(pVM); diff --git a/src/VBox/VMM/PGMSavedState.cpp b/src/VBox/VMM/PGMSavedState.cpp index 25ae351d0..8ce00ed7b 100644 --- a/src/VBox/VMM/PGMSavedState.cpp +++ b/src/VBox/VMM/PGMSavedState.cpp @@ -46,7 +46,8 @@ /******************************************************************************* * Defined Constants And Macros * *******************************************************************************/ -/** Saved state data unit version. */ +/** Saved state data unit version. + * @todo remove the guest mappings from the saved state at next version change! */ #define PGM_SAVED_STATE_VERSION 11 /** Saved state data unit version used during 3.1 development, misses the RAM * config. */ @@ -1939,13 +1940,13 @@ static DECLCALLBACK(int) pgmR3SaveExec(PVM pVM, PSSMHANDLE pSSM) /* * Save basic data (required / unaffected by relocation). */ + bool const fMappingsFixed = pVM->pgm.s.fMappingsFixed; + pVM->pgm.s.fMappingsFixed |= pVM->pgm.s.fMappingsFixedRestored; SSMR3PutStruct(pSSM, pPGM, &s_aPGMFields[0]); + pVM->pgm.s.fMappingsFixed = fMappingsFixed; for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) - { - PVMCPU pVCpu = &pVM->aCpus[idCpu]; - SSMR3PutStruct(pSSM, &pVCpu->pgm.s, &s_aPGMCpuFields[0]); - } + SSMR3PutStruct(pSSM, &pVM->aCpus[idCpu].pgm.s, &s_aPGMCpuFields[0]); /* * The guest mappings. @@ -2786,7 +2787,7 @@ static int pgmR3LoadFinalLocked(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion) SSMR3GetU32(pSSM, &pPGM->cbMappingFixed); uint32_t cbRamSizeIgnored; - rc = SSMR3GetU32(pSSM, &cbRamSizeIgnored); + rc = SSMR3GetU32(pSSM, &cbRamSizeIgnored); if (RT_FAILURE(rc)) return rc; SSMR3GetGCPhys(pSSM, &pVM->aCpus[0].pgm.s.GCPhysA20Mask); @@ -2811,65 +2812,27 @@ static int pgmR3LoadFinalLocked(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion) } /* - * The guest mappings. + * The guest mappings - skipped now, see re-fixation in the caller. */ uint32_t i = 0; for (;; i++) { - /* Check the seqence number / separator. */ - rc = SSMR3GetU32(pSSM, &u32Sep); + rc = SSMR3GetU32(pSSM, &u32Sep); /* seqence number */ if (RT_FAILURE(rc)) return rc; if (u32Sep == ~0U) break; - if (u32Sep != i) - { - AssertMsgFailed(("u32Sep=%#x (last)\n", u32Sep)); - return VERR_SSM_DATA_UNIT_FORMAT_CHANGED; - } + AssertMsgReturn(u32Sep == i, ("u32Sep=%#x i=%#x\n", u32Sep, i), VERR_SSM_DATA_UNIT_FORMAT_CHANGED); - /* get the mapping details. */ char szDesc[256]; - szDesc[0] = '\0'; rc = SSMR3GetStrZ(pSSM, szDesc, sizeof(szDesc)); if (RT_FAILURE(rc)) return rc; - RTGCPTR GCPtr; - SSMR3GetGCPtr(pSSM, &GCPtr); - RTGCPTR cPTs; - rc = SSMR3GetGCUIntPtr(pSSM, &cPTs); + RTGCPTR GCPtrIgnore; + SSMR3GetGCPtr(pSSM, &GCPtrIgnore); /* GCPtr */ + rc = SSMR3GetGCPtr(pSSM, &GCPtrIgnore); /* cPTs */ if (RT_FAILURE(rc)) return rc; - - /* find matching range. */ - PPGMMAPPING pMapping; - for (pMapping = pPGM->pMappingsR3; pMapping; pMapping = pMapping->pNextR3) - { - if ( pMapping->cPTs == cPTs - && !strcmp(pMapping->pszDesc, szDesc)) - break; -#ifdef DEBUG_sandervl - if ( !strcmp(szDesc, "Hypervisor Memory Area") - && HWACCMIsEnabled(pVM)) - break; -#endif - } - if (!pMapping) - return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("Couldn't find mapping: cPTs=%#x szDesc=%s (GCPtr=%RGv)"), - cPTs, szDesc, GCPtr); - - /* relocate it. */ - if ( pMapping->GCPtr != GCPtr -#ifdef DEBUG_sandervl - && !(!strcmp(szDesc, "Hypervisor Memory Area") && HWACCMIsEnabled(pVM)) -#endif - ) - { - AssertMsg((GCPtr >> X86_PD_SHIFT << X86_PD_SHIFT) == GCPtr, ("GCPtr=%RGv\n", GCPtr)); - pgmR3MapRelocate(pVM, pMapping, pMapping->GCPtr, GCPtr); - } - else - Log(("pgmR3Load: '%s' needed no relocation (%RGv)\n", szDesc, GCPtr)); } /* @@ -2893,9 +2856,11 @@ static int pgmR3LoadFinalLocked(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion) return rc; } - return pgmR3LoadMemory(pVM, pSSM, SSM_PASS_FINAL); + rc = pgmR3LoadMemory(pVM, pSSM, SSM_PASS_FINAL); } - return pgmR3LoadMemoryOld(pVM, pSSM, uVersion); + else + rc = pgmR3LoadMemoryOld(pVM, pSSM, uVersion); + return rc; } @@ -2972,20 +2937,25 @@ static DECLCALLBACK(int) pgmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, PVMCPU pVCpu = &pVM->aCpus[i]; VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL); VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); - pVCpu->pgm.s.fSyncFlags |= PGM_SYNC_UPDATE_PAGE_BIT_VIRTUAL; } pgmR3HandlerPhysicalUpdateAll(pVM); + /* + * Change the paging mode and restore PGMCPU::GCPhysCR3. + * (The latter requires the CPUM state to be restored already.) + */ + if (CPUMR3IsStateRestorePending(pVM)) + return SSMR3SetLoadError(pSSM, VERR_WRONG_ORDER, RT_SRC_POS, + N_("PGM was unexpectedly restored before CPUM")); + for (VMCPUID i = 0; i < pVM->cCpus; i++) { PVMCPU pVCpu = &pVM->aCpus[i]; - /* - * Change the paging mode. - */ rc = PGMR3ChangeMode(pVM, pVCpu, pVCpu->pgm.s.enmGuestMode); + AssertLogRelRCReturn(rc, rc); /* Restore pVM->pgm.s.GCPhysCR3. */ Assert(pVCpu->pgm.s.GCPhysCR3 == NIL_RTGCPHYS); @@ -2999,6 +2969,62 @@ static DECLCALLBACK(int) pgmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, GCPhysCR3 = (GCPhysCR3 & X86_CR3_PAGE_MASK); pVCpu->pgm.s.GCPhysCR3 = GCPhysCR3; } + + /* + * Try re-fixate the guest mappings. + */ + pVM->pgm.s.fMappingsFixedRestored = false; + if ( pVM->pgm.s.fMappingsFixed + && pgmMapAreMappingsEnabled(&pVM->pgm.s)) + { + RTGCPTR GCPtrFixed = pVM->pgm.s.GCPtrMappingFixed; + uint32_t cbFixed = pVM->pgm.s.cbMappingFixed; + pVM->pgm.s.fMappingsFixed = false; + + uint32_t cbRequired; + int rc2 = PGMR3MappingsSize(pVM, &cbRequired); AssertRC(rc2); + if ( RT_SUCCESS(rc2) + && cbRequired > cbFixed) + rc2 = VERR_OUT_OF_RANGE; + if (RT_SUCCESS(rc2)) + rc2 = pgmR3MappingsFixInternal(pVM, GCPtrFixed, cbFixed); + if (RT_FAILURE(rc2)) + { + LogRel(("PGM: Unable to re-fixate the guest mappings at %RGv-%RGv: rc=%Rrc (cbRequired=%#x)\n", + GCPtrFixed, GCPtrFixed + cbFixed, rc2, cbRequired)); + pVM->pgm.s.fMappingsFixed = false; + pVM->pgm.s.fMappingsFixedRestored = true; + pVM->pgm.s.GCPtrMappingFixed = GCPtrFixed; + pVM->pgm.s.cbMappingFixed = cbFixed; + } + } + else + { + /* We used to set fixed + disabled while we only use disabled now, + so wipe the state to avoid any confusion. */ + pVM->pgm.s.fMappingsFixed = false; + pVM->pgm.s.GCPtrMappingFixed = NIL_RTGCPTR; + pVM->pgm.s.cbMappingFixed = 0; + } + + /* + * If we have floating mappings, do a CR3 sync now to make sure the HMA + * doesn't conflict with guest code / data and thereby cause trouble + * when restoring other components like PATM. + */ + if (pgmMapAreMappingsFloating(&pVM->pgm.s)) + { + PVMCPU pVCpu = &pVM->aCpus[0]; + rc = PGMSyncCR3(pVCpu, CPUMGetGuestCR0(pVCpu), CPUMGetGuestCR3(pVCpu), CPUMGetGuestCR4(pVCpu), true); + if (RT_FAILURE(rc)) + return SSMR3SetLoadError(pSSM, VERR_WRONG_ORDER, RT_SRC_POS, + N_("PGMSyncCR3 failed unexpectedly with rc=%Rrc"), rc); + + /* Make sure to re-sync before executing code. */ + VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL); + VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); + pVCpu->pgm.s.fSyncFlags |= PGM_SYNC_UPDATE_PAGE_BIT_VIRTUAL; + } } } diff --git a/src/VBox/VMM/VM.cpp b/src/VBox/VMM/VM.cpp index 8b4d54405..7ee00b5aa 100644 --- a/src/VBox/VMM/VM.cpp +++ b/src/VBox/VMM/VM.cpp @@ -1018,7 +1018,7 @@ static int vmR3InitRing0(PVM pVM) if (RT_SUCCESS(rc)) rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING0); - /** todo: move this to the VMINITCOMPLETED_RING0 notification handler once implemented */ + /** @todo Move this to the VMINITCOMPLETED_RING0 notification handler. */ if (RT_SUCCESS(rc)) rc = HWACCMR3InitFinalizeR0(pVM); diff --git a/src/VBox/VMM/VMM.cpp b/src/VBox/VMM/VMM.cpp index 60913a70a..fe9e9450c 100644 --- a/src/VBox/VMM/VMM.cpp +++ b/src/VBox/VMM/VMM.cpp @@ -401,6 +401,7 @@ static void vmmR3InitRegisterStats(PVM pVM) STAM_REG(pVM, &pVM->vmm.s.StatRZRetInterruptPending, STAMTYPE_COUNTER, "/VMM/RZRet/InterruptPending", STAMUNIT_OCCURENCES, "Number of VINF_EM_RAW_INTERRUPT_PENDING returns."); STAM_REG(pVM, &pVM->vmm.s.StatRZRetPATMDuplicateFn, STAMTYPE_COUNTER, "/VMM/RZRet/PATMDuplicateFn", STAMUNIT_OCCURENCES, "Number of VINF_PATM_DUPLICATE_FUNCTION returns."); STAM_REG(pVM, &pVM->vmm.s.StatRZRetPGMChangeMode, STAMTYPE_COUNTER, "/VMM/RZRet/PGMChangeMode", STAMUNIT_OCCURENCES, "Number of VINF_PGM_CHANGE_MODE returns."); + STAM_REG(pVM, &pVM->vmm.s.StatRZRetPGMFlushPending, STAMTYPE_COUNTER, "/VMM/RZRet/PGMFlushPending", STAMUNIT_OCCURENCES, "Number of VINF_PGM_POOL_FLUSH_PENDING returns."); STAM_REG(pVM, &pVM->vmm.s.StatRZRetPendingRequest, STAMTYPE_COUNTER, "/VMM/RZRet/PendingRequest", STAMUNIT_OCCURENCES, "Number of VINF_EM_PENDING_REQUEST returns."); STAM_REG(pVM, &pVM->vmm.s.StatRZRetPatchTPR, STAMTYPE_COUNTER, "/VMM/RZRet/PatchTPR", STAMUNIT_OCCURENCES, "Number of VINF_EM_HWACCM_PATCH_TPR_INSTR returns."); STAM_REG(pVM, &pVM->vmm.s.StatRZRetCallRing3, STAMTYPE_COUNTER, "/VMM/RZCallR3/Misc", STAMUNIT_OCCURENCES, "Number of Other ring-3 calls."); diff --git a/src/VBox/VMM/VMMAll/PGMAll.cpp b/src/VBox/VMM/VMMAll/PGMAll.cpp index 719ede37b..555e029ee 100644 --- a/src/VBox/VMM/VMMAll/PGMAll.cpp +++ b/src/VBox/VMM/VMMAll/PGMAll.cpp @@ -722,7 +722,7 @@ VMMDECL(int) PGMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCPtrPage) /* * Check for conflicts and pending CR3 monitoring updates. */ - if (!pVM->pgm.s.fMappingsFixed) + if (pgmMapAreMappingsFloating(&pVM->pgm.s)) { if ( pgmGetMapping(pVM, GCPtrPage) && PGMGstGetPage(pVCpu, GCPtrPage, NULL, NULL) != VERR_PAGE_TABLE_NOT_PRESENT) @@ -751,6 +751,9 @@ VMMDECL(int) PGMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCPtrPage) pgmUnlock(pVM); STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,InvalidatePage), a); + /* Invalidate the TLB entry; might already be done by InvalidatePage (@todo) */ + PGM_INVL_PG(pVCpu, GCPtrPage); + #ifdef IN_RING3 /* * Check if we have a pending update of the CR3 monitoring. @@ -759,7 +762,7 @@ VMMDECL(int) PGMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCPtrPage) && (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_MONITOR_CR3)) { pVCpu->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; - Assert(!pVM->pgm.s.fMappingsFixed); + Assert(!pVM->pgm.s.fMappingsFixed); Assert(!pVM->pgm.s.fMappingsDisabled); } /* @@ -770,6 +773,14 @@ VMMDECL(int) PGMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCPtrPage) */ CSAMR3FlushPage(pVM, GCPtrPage); #endif /* IN_RING3 */ + + /* Ignore all irrelevant error codes. */ + if ( rc == VERR_PAGE_NOT_PRESENT + || rc == VERR_PAGE_TABLE_NOT_PRESENT + || rc == VERR_PAGE_DIRECTORY_PTR_NOT_PRESENT + || rc == VERR_PAGE_MAP_LEVEL4_NOT_PRESENT) + rc = VINF_SUCCESS; + return rc; } @@ -1681,10 +1692,8 @@ VMMDECL(int) PGMFlushTLB(PVMCPU pVCpu, uint64_t cr3, bool fGlobal) rc = PGM_BTH_PFN(MapCR3, pVCpu)(pVCpu, GCPhysCR3); if (RT_LIKELY(rc == VINF_SUCCESS)) { - if (!pVM->pgm.s.fMappingsFixed) - { + if (pgmMapAreMappingsFloating(&pVM->pgm.s)) pVCpu->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; - } } else { @@ -1692,7 +1701,7 @@ VMMDECL(int) PGMFlushTLB(PVMCPU pVCpu, uint64_t cr3, bool fGlobal) Assert(VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_PGM_SYNC_CR3)); pVCpu->pgm.s.GCPhysCR3 = GCPhysOldCR3; pVCpu->pgm.s.fSyncFlags |= PGM_SYNC_MAP_CR3; - if (!pVM->pgm.s.fMappingsFixed) + if (pgmMapAreMappingsFloating(&pVM->pgm.s)) pVCpu->pgm.s.fSyncFlags |= PGM_SYNC_MONITOR_CR3; } @@ -1718,7 +1727,7 @@ VMMDECL(int) PGMFlushTLB(PVMCPU pVCpu, uint64_t cr3, bool fGlobal) if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_MONITOR_CR3) { pVCpu->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; - Assert(!pVM->pgm.s.fMappingsFixed); + Assert(!pVM->pgm.s.fMappingsFixed); Assert(!pVM->pgm.s.fMappingsDisabled); } if (fGlobal) STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_MID_Z(Stat,FlushTLBSameCR3Global)); @@ -1755,9 +1764,9 @@ VMMDECL(int) PGMUpdateCR3(PVMCPU pVCpu, uint64_t cr3) LogFlow(("PGMUpdateCR3: cr3=%RX64 OldCr3=%RX64\n", cr3, pVCpu->pgm.s.GCPhysCR3)); /* We assume we're only called in nested paging mode. */ - Assert(pVM->pgm.s.fMappingsFixed); - Assert(!(pVCpu->pgm.s.fSyncFlags & PGM_SYNC_MONITOR_CR3)); Assert(HWACCMIsNestedPagingActive(pVM) || pVCpu->pgm.s.enmShadowMode == PGMMODE_EPT); + Assert(pVM->pgm.s.fMappingsDisabled); + Assert(!(pVCpu->pgm.s.fSyncFlags & PGM_SYNC_MONITOR_CR3)); /* * Remap the CR3 content and adjust the monitoring if CR3 was actually changed. @@ -1904,7 +1913,7 @@ VMMDECL(int) PGMSyncCR3(PVMCPU pVCpu, uint64_t cr0, uint64_t cr3, uint64_t cr4, if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_MONITOR_CR3) { pVCpu->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; - Assert(!pVM->pgm.s.fMappingsFixed); + Assert(!pVM->pgm.s.fMappingsFixed); Assert(!pVM->pgm.s.fMappingsDisabled); } } diff --git a/src/VBox/VMM/VMMAll/PGMAllBth.h b/src/VBox/VMM/VMMAll/PGMAllBth.h index c342280c3..267f17aa1 100644 --- a/src/VBox/VMM/VMMAll/PGMAllBth.h +++ b/src/VBox/VMM/VMMAll/PGMAllBth.h @@ -64,10 +64,6 @@ RT_C_DECLS_END # error "Invalid combination; AMD64 guest implies AMD64 shadow and vice versa" #endif -#ifdef IN_RING0 /* no mappings in VT-x and AMD-V mode */ -# define PGM_WITHOUT_MAPPINGS -#endif - #ifndef IN_RING3 /** @@ -292,7 +288,7 @@ PGM_BTH_DECL(int, Trap0eHandler)(PVMCPU pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegF /* * The first thing we check is if we've got an undetected conflict. */ - if (!pVM->pgm.s.fMappingsFixed) + if (pgmMapAreMappingsFloating(&pVM->pgm.s)) { unsigned iPT = pMapping->cb >> GST_PD_SHIFT; while (iPT-- > 0) @@ -2625,9 +2621,7 @@ PGM_BTH_DECL(int, SyncPT)(PVMCPU pVCpu, unsigned iPDSrc, PGSTPD pPDSrc, RTGCPTR PdeDst = *pPdeDst; # endif } -# else /* PGM_WITHOUT_MAPPINGS */ - Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s)); -# endif /* PGM_WITHOUT_MAPPINGS */ +# endif /* !PGM_WITHOUT_MAPPINGS */ Assert(!PdeDst.n.u1Present); /* We're only supposed to call SyncPT on PDE!P and conflicts.*/ # if defined(IN_RC) @@ -3478,7 +3472,7 @@ PGM_BTH_DECL(int, SyncCR3)(PVMCPU pVCpu, uint64_t cr0, uint64_t cr3, uint64_t cr PGM_GST_NAME(HandlerVirtualUpdate)(pVM, cr4); STAM_PROFILE_STOP(&pVCpu->pgm.s.CTX_MID_Z(Stat,SyncCR3Handlers), h); pgmUnlock(pVM); -#endif +#endif /* !NESTED && !EPT */ #if PGM_SHW_TYPE == PGM_TYPE_NESTED || PGM_SHW_TYPE == PGM_TYPE_EPT /* @@ -3486,6 +3480,7 @@ PGM_BTH_DECL(int, SyncCR3)(PVMCPU pVCpu, uint64_t cr0, uint64_t cr3, uint64_t cr */ /** @todo check if this is really necessary; the call does it as well... */ HWACCMFlushTLB(pVCpu); + Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s)); return VINF_SUCCESS; #elif PGM_SHW_TYPE == PGM_TYPE_AMD64 @@ -3493,25 +3488,28 @@ PGM_BTH_DECL(int, SyncCR3)(PVMCPU pVCpu, uint64_t cr0, uint64_t cr3, uint64_t cr * AMD64 (Shw & Gst) - No need to check all paging levels; we zero * out the shadow parts when the guest modifies its tables. */ + Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s)); return VINF_SUCCESS; #else /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT && PGM_SHW_TYPE != PGM_TYPE_AMD64 */ -# ifdef PGM_WITHOUT_MAPPINGS - Assert(pVM->pgm.s.fMappingsFixed); - return VINF_SUCCESS; -# else - /* Nothing to do when mappings are fixed. */ - if (pVM->pgm.s.fMappingsFixed) - return VINF_SUCCESS; - - int rc = PGMMapResolveConflicts(pVM); - Assert(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3); - if (rc == VINF_PGM_SYNC_CR3) +# ifndef PGM_WITHOUT_MAPPINGS + /* + * Check for and resolve conflicts with our guest mappings if they + * are enabled and not fixed. + */ + if (pgmMapAreMappingsFloating(&pVM->pgm.s)) { - LogFlow(("SyncCR3: detected conflict -> VINF_PGM_SYNC_CR3\n")); - return VINF_PGM_SYNC_CR3; + int rc = pgmMapResolveConflicts(pVM); + Assert(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3); + if (rc == VINF_PGM_SYNC_CR3) + { + LogFlow(("SyncCR3: detected conflict -> VINF_PGM_SYNC_CR3\n")); + return VINF_PGM_SYNC_CR3; + } } +# else + Assert(!pgmMapAreMappingsEnabled(&pVM->pgm.s)); # endif return VINF_SUCCESS; #endif /* PGM_SHW_TYPE != PGM_TYPE_NESTED && PGM_SHW_TYPE != PGM_TYPE_EPT && PGM_SHW_TYPE != PGM_TYPE_AMD64 */ diff --git a/src/VBox/VMM/VMMAll/PGMAllMap.cpp b/src/VBox/VMM/VMMAll/PGMAllMap.cpp index 389034d75..42d12ffbf 100644 --- a/src/VBox/VMM/VMMAll/PGMAllMap.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllMap.cpp @@ -388,6 +388,9 @@ void pgmMapClearShadowPDEs(PVM pVM, PPGMPOOLPAGE pShwPageCR3, PPGMMAPPING pMap, { Log(("pgmMapClearShadowPDEs: old pde %x (cPTs=%x) (mappings enabled %d) fDeactivateCR3=%RTbool\n", iOldPDE, pMap->cPTs, pgmMapAreMappingsEnabled(&pVM->pgm.s), fDeactivateCR3)); + /* + * Skip this if disabled or if it doesn't apply. + */ if ( !pgmMapAreMappingsEnabled(&pVM->pgm.s) || pVM->cCpus > 1) return; @@ -601,9 +604,8 @@ VMMDECL(void) PGMMapCheck(PVM pVM) if (!pgmMapAreMappingsEnabled(&pVM->pgm.s)) return; - Assert(pVM->cCpus == 1); - /* This only applies to raw mode where we only support 1 VCPU. */ + Assert(pVM->cCpus == 1); PVMCPU pVCpu = VMMGetCpu0(pVM); Assert(pVCpu->pgm.s.CTX_SUFF(pShwPageCR3)); @@ -632,14 +634,15 @@ VMMDECL(void) PGMMapCheck(PVM pVM) int pgmMapActivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3) { /* - * Can skip this if mappings are disabled. + * Skip this if disabled or if it doesn't apply. */ if ( !pgmMapAreMappingsEnabled(&pVM->pgm.s) || pVM->cCpus > 1) return VINF_SUCCESS; - /* Note. A log flush (in RC) can cause problems when called from MapCR3 (inconsistent state will trigger assertions). */ - Log4(("pgmMapActivateCR3: fixed mappings=%d idxShwPageCR3=%#x\n", pVM->pgm.s.fMappingsFixed, pShwPageCR3 ? pShwPageCR3->idx : NIL_PGMPOOL_IDX)); + /* Note! This might not be logged successfully in RC because we usually + cannot flush the log at this point. */ + Log4(("pgmMapActivateCR3: fixed mappings=%RTbool idxShwPageCR3=%#x\n", pVM->pgm.s.fMappingsFixed, pShwPageCR3 ? pShwPageCR3->idx : NIL_PGMPOOL_IDX)); #ifdef VBOX_STRICT PVMCPU pVCpu = VMMGetCpu0(pVM); @@ -668,7 +671,7 @@ int pgmMapActivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3) int pgmMapDeactivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3) { /* - * Can skip this if mappings are disabled. + * Skip this if disabled or if it doesn't apply. */ if ( !pgmMapAreMappingsEnabled(&pVM->pgm.s) || pVM->cCpus > 1) @@ -701,7 +704,7 @@ VMMDECL(bool) PGMMapHasConflicts(PVM pVM) /* * Can skip this if mappings are safely fixed. */ - if (pVM->pgm.s.fMappingsFixed) + if (!pgmMapAreMappingsFloating(&pVM->pgm.s)) return false; Assert(pVM->cCpus == 1); @@ -787,25 +790,21 @@ VMMDECL(bool) PGMMapHasConflicts(PVM pVM) /** - * Checks and resolves (ring 3 only) guest conflicts with VMM GC mappings. + * Checks and resolves (ring 3 only) guest conflicts with the guest mappings. * * @returns VBox status. * @param pVM The virtual machine. */ -VMMDECL(int) PGMMapResolveConflicts(PVM pVM) +int pgmMapResolveConflicts(PVM pVM) { - /* - * Can skip this if mappings are safely fixed. - */ - if (pVM->pgm.s.fMappingsFixed) - return VINF_SUCCESS; - - Assert(pVM->cCpus == 1); + /* The caller is expected to check these two conditions. */ + Assert(!pVM->pgm.s.fMappingsFixed); + Assert(!pVM->pgm.s.fMappingsDisabled); /* This only applies to raw mode where we only support 1 VCPU. */ - PVMCPU pVCpu = &pVM->aCpus[0]; - - PGMMODE const enmGuestMode = PGMGetGuestMode(pVCpu); + Assert(pVM->cCpus == 1); + PVMCPU pVCpu = &pVM->aCpus[0]; + PGMMODE const enmGuestMode = PGMGetGuestMode(pVCpu); Assert(enmGuestMode <= PGMMODE_PAE_NX); if (enmGuestMode == PGMMODE_32_BIT) diff --git a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp index 14a979a27..2fdbdca5f 100644 --- a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp @@ -654,7 +654,7 @@ static int pgmPhysPageMapCommon(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, PPPGMP /* Lookup the MMIO2 range and use pvR3 to calc the address. */ PPGMRAMRANGE pRam = pgmPhysGetRange(&pVM->pgm.s, GCPhys); AssertMsgReturn(pRam || !pRam->pvR3, ("pRam=%p pPage=%R[pgmpage]\n", pRam, pPage), VERR_INTERNAL_ERROR_2); - *ppv = (void *)((uintptr_t)pRam->pvR3 + (GCPhys - pRam->GCPhys)); + *ppv = (void *)((uintptr_t)pRam->pvR3 + (GCPhys & ~(RTGCPHYS)PAGE_OFFSET_MASK) - pRam->GCPhys); } else if (PGM_PAGE_GET_TYPE(pPage) == PGMPAGETYPE_MMIO2_ALIAS_MMIO) { diff --git a/src/VBox/VMM/VMMAll/PGMAllPool.cpp b/src/VBox/VMM/VMMAll/PGMAllPool.cpp index 9592fecbc..3d8ecda37 100644 --- a/src/VBox/VMM/VMMAll/PGMAllPool.cpp +++ b/src/VBox/VMM/VMMAll/PGMAllPool.cpp @@ -1172,6 +1172,7 @@ DECLEXPORT(int) pgmPoolAccessHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE if (pPage->fDirty) { Assert(VMCPU_FF_ISSET(pVCpu, VMCPU_FF_TLB_FLUSH)); + pgmUnlock(pVM); return VINF_SUCCESS; /* SMP guest case where we were blocking on the pgm lock while the same page was being marked dirty. */ } #endif @@ -2647,6 +2648,14 @@ int pgmPoolSyncCR3(PVMCPU pVCpu) { LogFlow(("SyncCR3: PGM_SYNC_CLEAR_PGM_POOL is set -> VINF_PGM_SYNC_CR3\n")); VMCPU_FF_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3); /** @todo no need to do global sync, right? */ + + /* Make sure all other VCPUs return to ring 3. */ + if (pVM->cCpus > 1) + { + VM_FF_SET(pVM, VM_FF_PGM_POOL_FLUSH_PENDING); + PGM_INVL_ALL_VCPU_TLBS(pVM); + } + return VINF_PGM_SYNC_CR3; } # endif /* !IN_RING3 */ diff --git a/src/VBox/VMM/VMMAll/REMAll.cpp b/src/VBox/VMM/VMMAll/REMAll.cpp index 392c60242..aa683c0bd 100644 --- a/src/VBox/VMM/VMMAll/REMAll.cpp +++ b/src/VBox/VMM/VMMAll/REMAll.cpp @@ -232,6 +232,7 @@ VMMDECL(void) REMNotifyHandlerPhysicalFlushIfAlmostFull(PVM pVM, PVMCPU pVCpu) VMMRZCallRing3NoCpu(pVM, VMMCALLRING3_REM_REPLAY_HANDLER_NOTIFICATIONS, 0); AssertRelease(pVM->rem.s.idxPendingList == UINT32_MAX); + AssertRelease(pVM->rem.s.idxFreeList != UINT32_MAX); } #endif /* IN_RC */ diff --git a/src/VBox/VMM/VMMInternal.h b/src/VBox/VMM/VMMInternal.h index 31a6afa76..7ebc99054 100644 --- a/src/VBox/VMM/VMMInternal.h +++ b/src/VBox/VMM/VMMInternal.h @@ -373,6 +373,7 @@ typedef struct VMM STAMCOUNTER StatRZRetPATMDuplicateFn; STAMCOUNTER StatRZRetPGMChangeMode; STAMCOUNTER StatRZRetPendingRequest; + STAMCOUNTER StatRZRetPGMFlushPending; STAMCOUNTER StatRZRetPatchTPR; STAMCOUNTER StatRZCallPDMLock; STAMCOUNTER StatRZCallLogFlush; diff --git a/src/VBox/VMM/VMMR0/HWACCMR0.cpp b/src/VBox/VMM/VMMR0/HWACCMR0.cpp index 5973cc52b..e236eb519 100644 --- a/src/VBox/VMM/VMMR0/HWACCMR0.cpp +++ b/src/VBox/VMM/VMMR0/HWACCMR0.cpp @@ -89,6 +89,9 @@ static struct /** Host CR4 value (set by ring-0 VMX init) */ uint64_t hostCR4; + /** Host EFER value (set by ring-0 VMX init) */ + uint64_t hostEFER; + /** VMX MSR values */ struct { @@ -148,7 +151,8 @@ static struct */ VMMR0DECL(int) HWACCMR0Init(void) { - int rc; + int rc; + bool fAMDVPresent = false; memset(&HWACCMR0Globals, 0, sizeof(HWACCMR0Globals)); HWACCMR0Globals.enmHwAccmState = HWACCMSTATE_UNINITIALIZED; @@ -268,6 +272,7 @@ VMMR0DECL(int) HWACCMR0Init(void) if (!HWACCMR0Globals.vmx.fUsingSUPR0EnableVTx) { HWACCMR0Globals.vmx.hostCR4 = ASMGetCR4(); + HWACCMR0Globals.vmx.hostEFER = ASMRdMsr(MSR_K6_EFER); rc = RTR0MemObjAllocCont(&pScatchMemObj, 1 << PAGE_SHIFT, true /* executable R0 mapping */); if (RT_FAILURE(rc)) @@ -353,6 +358,11 @@ VMMR0DECL(int) HWACCMR0Init(void) int aRc[RTCPUSET_MAX_CPUS]; RTCPUID idCpu = 0; + fAMDVPresent = true; + + /* Query AMD features. */ + ASMCpuId(0x8000000A, &HWACCMR0Globals.svm.u32Rev, &HWACCMR0Globals.uMaxASID, &u32Dummy, &HWACCMR0Globals.svm.u32Features); + /* We need to check if AMD-V has been properly initialized on all CPUs. Some BIOSes might do a poor job. */ memset(aRc, 0, sizeof(aRc)); rc = RTMpOnAll(HWACCMR0InitCPU, (void *)u32VendorEBX, aRc); @@ -367,8 +377,6 @@ VMMR0DECL(int) HWACCMR0Init(void) #endif if (RT_SUCCESS(rc)) { - /* Query AMD features. */ - ASMCpuId(0x8000000A, &HWACCMR0Globals.svm.u32Rev, &HWACCMR0Globals.uMaxASID, &u32Dummy, &HWACCMR0Globals.svm.u32Features); /* Read the HWCR msr for diagnostics. */ HWACCMR0Globals.svm.msrHWCR = ASMRdMsr(MSR_K8_HWCR); HWACCMR0Globals.svm.fSupported = true; @@ -399,7 +407,7 @@ VMMR0DECL(int) HWACCMR0Init(void) HWACCMR0Globals.pfnSetupVM = VMXR0SetupVM; } else - if (HWACCMR0Globals.svm.fSupported) + if (fAMDVPresent) { HWACCMR0Globals.pfnEnterSession = SVMR0Enter; HWACCMR0Globals.pfnLeaveSession = SVMR0Leave; @@ -477,7 +485,7 @@ VMMR0DECL(int) HWACCMR0Term(void) if (!HWACCMR0Globals.vmx.fUsingSUPR0EnableVTx) { rc = RTPowerNotificationDeregister(hwaccmR0PowerCallback, 0); - Assert(RT_SUCCESS(rc)); + AssertRC(rc); } else rc = VINF_SUCCESS; @@ -898,6 +906,7 @@ VMMR0DECL(int) HWACCMR0InitVM(PVM pVM) pVM->hwaccm.s.vmx.msr.feature_ctrl = HWACCMR0Globals.vmx.msr.feature_ctrl; pVM->hwaccm.s.vmx.hostCR4 = HWACCMR0Globals.vmx.hostCR4; + pVM->hwaccm.s.vmx.hostEFER = HWACCMR0Globals.vmx.hostEFER; pVM->hwaccm.s.vmx.msr.vmx_basic_info = HWACCMR0Globals.vmx.msr.vmx_basic_info; pVM->hwaccm.s.vmx.msr.vmx_pin_ctls = HWACCMR0Globals.vmx.msr.vmx_pin_ctls; pVM->hwaccm.s.vmx.msr.vmx_proc_ctls = HWACCMR0Globals.vmx.msr.vmx_proc_ctls; diff --git a/src/VBox/VMM/VMMR0/HWSVMR0.cpp b/src/VBox/VMM/VMMR0/HWSVMR0.cpp index 85c4cca07..53190b444 100644 --- a/src/VBox/VMM/VMMR0/HWSVMR0.cpp +++ b/src/VBox/VMM/VMMR0/HWSVMR0.cpp @@ -77,7 +77,17 @@ VMMR0DECL(int) SVMR0EnableCpu(PHWACCM_CPUINFO pCpu, PVM pVM, void *pvPageCpu, RT /* We must turn on AMD-V and setup the host state physical address, as those MSRs are per-cpu/core. */ uint64_t val = ASMRdMsr(MSR_K6_EFER); if (val & MSR_K6_EFER_SVME) - return VERR_SVM_IN_USE; + { + /* If the VBOX_HWVIRTEX_IGNORE_SVM_IN_USE hack is active, then we blindly use AMD-V. */ + if ( pVM + && pVM->hwaccm.s.svm.fIgnoreInUseError) + { + pCpu->fIgnoreAMDVInUseError = true; + } + + if (!pCpu->fIgnoreAMDVInUseError) + return VERR_SVM_IN_USE; + } /* Turn on AMD-V in the EFER MSR. */ ASMWrMsr(MSR_K6_EFER, val | MSR_K6_EFER_SVME); @@ -561,7 +571,6 @@ static int SVMR0CheckPendingInterrupt(PVM pVM, PVMCPU pVCpu, SVM_VMCB *pVMCB, CP ) { uint8_t u8Vector; - int rc; TRPMEVENT enmType; SVM_EVENT Event; RTGCUINT u32ErrorCode; @@ -1016,29 +1025,53 @@ ResumeExecution: #endif /* Check for pending actions that force us to go back to ring 3. */ + if ( VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK | VM_FF_REQUEST | VM_FF_PGM_POOL_FLUSH_PENDING) + || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK | VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_REQUEST)) + { + /* Check if a sync operation is pending. */ + if (VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL)) + { + rc = PGMSyncCR3(pVCpu, pCtx->cr0, pCtx->cr3, pCtx->cr4, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_PGM_SYNC_CR3)); + AssertRC(rc); + if (rc != VINF_SUCCESS) + { + Log(("Pending pool sync is forcing us back to ring 3; rc=%d\n", rc)); + goto end; + } + } + #ifdef DEBUG - /* Intercept X86_XCPT_DB if stepping is enabled */ - if (!DBGFIsStepping(pVCpu)) + /* Intercept X86_XCPT_DB if stepping is enabled */ + if (!DBGFIsStepping(pVCpu)) #endif - { - if ( VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK) - || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK)) { - VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_TO_R3); - STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatSwitchToR3); + if ( VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK) + || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK)) + { + VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_TO_R3); + STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatSwitchToR3); + STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); + rc = RT_UNLIKELY(VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)) ? VINF_EM_NO_MEMORY : VINF_EM_RAW_TO_R3; + goto end; + } + } + + /* Pending request packets might contain actions that need immediate attention, such as pending hardware interrupts. */ + if ( VM_FF_ISPENDING(pVM, VM_FF_REQUEST) + || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_REQUEST)) + { STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); - rc = RT_UNLIKELY(VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)) ? VINF_EM_NO_MEMORY : VINF_EM_RAW_TO_R3; + rc = VINF_EM_PENDING_REQUEST; goto end; } - } - /* Pending request packets might contain actions that need immediate attention, such as pending hardware interrupts. */ - if ( VM_FF_ISPENDING(pVM, VM_FF_REQUEST) - || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_REQUEST)) - { - STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); - rc = VINF_EM_PENDING_REQUEST; - goto end; + /* Check if a pgm pool flush is in progress. */ + if (VM_FF_ISPENDING(pVM, VM_FF_PGM_POOL_FLUSH_PENDING)) + { + STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); + rc = VINF_PGM_POOL_FLUSH_PENDING; + goto end; + } } #ifdef VBOX_WITH_VMMR0_DISABLE_PREEMPTION @@ -1080,8 +1113,8 @@ ResumeExecution: bool fPending; /* TPR caching in CR8 */ - int rc = PDMApicGetTPR(pVCpu, &u8LastTPR, &fPending); - AssertRC(rc); + int rc2 = PDMApicGetTPR(pVCpu, &u8LastTPR, &fPending); + AssertRC(rc2); if (pVM->hwaccm.s.fTPRPatchingActive) { @@ -1702,7 +1735,6 @@ ResumeExecution: STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitShadowPF); TRPMResetTrap(pVCpu); - STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatExit1, x); goto ResumeExecution; } @@ -2025,19 +2057,6 @@ ResumeExecution: default: AssertFailed(); } - /* Check if a sync operation is pending. */ - if ( rc == VINF_SUCCESS /* don't bother if we are going to ring 3 anyway */ - && VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL)) - { - rc = PGMSyncCR3(pVCpu, pCtx->cr0, pCtx->cr3, pCtx->cr4, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_PGM_SYNC_CR3)); - AssertRC(rc); - - STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatFlushTLBCRxChange); - - /* Must be set by PGMSyncCR3 */ - AssertMsg(rc == VINF_SUCCESS || rc == VINF_PGM_SYNC_CR3 || PGMGetGuestMode(pVCpu) <= PGMMODE_PROTECTED || pVCpu->hwaccm.s.fForceTLBFlush, - ("rc=%Rrc mode=%d fForceTLBFlush=%RTbool\n", rc, PGMGetGuestMode(pVCpu), pVCpu->hwaccm.s.fForceTLBFlush)); - } if (rc == VINF_SUCCESS) { /* EIP has been updated already. */ @@ -2677,12 +2696,8 @@ static int svmR0InterpretInvlPg(PVMCPU pVCpu, PDISCPUSTATE pCpu, PCPUMCTXCORE pR */ rc = PGMInvalidatePage(pVCpu, addr); if (RT_SUCCESS(rc)) - { - /* Manually invalidate the page for the VM's TLB. */ - Log(("SVMR0InvlpgA %RGv ASID=%d\n", addr, uASID)); - SVMR0InvlpgA(addr, uASID); return VINF_SUCCESS; - } + AssertRC(rc); return rc; } @@ -2724,9 +2739,8 @@ static int svmR0InterpretInvpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, ui Assert(cbOp == pDis->opsize); rc = svmR0InterpretInvlPg(pVCpu, pDis, pRegFrame, uASID); if (RT_SUCCESS(rc)) - { pRegFrame->rip += cbOp; /* Move on to the next instruction. */ - } + return rc; } } diff --git a/src/VBox/VMM/VMMR0/HWVMXR0.cpp b/src/VBox/VMM/VMMR0/HWVMXR0.cpp index b6053be4e..51afab42a 100644 --- a/src/VBox/VMM/VMMR0/HWVMXR0.cpp +++ b/src/VBox/VMM/VMMR0/HWVMXR0.cpp @@ -2407,27 +2407,53 @@ ResumeExecution: #endif /* Check for pending actions that force us to go back to ring 3. */ + if ( VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK | VM_FF_REQUEST | VM_FF_PGM_POOL_FLUSH_PENDING) + || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK | VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_REQUEST)) + { + /* Check if a sync operation is pending. */ + if (VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL)) + { + rc = PGMSyncCR3(pVCpu, pCtx->cr0, pCtx->cr3, pCtx->cr4, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_PGM_SYNC_CR3)); + AssertRC(rc); + if (rc != VINF_SUCCESS) + { + Log(("Pending pool sync is forcing us back to ring 3; rc=%d\n", rc)); + goto end; + } + } + #ifdef DEBUG - /* Intercept X86_XCPT_DB if stepping is enabled */ - if (!DBGFIsStepping(pVCpu)) + /* Intercept X86_XCPT_DB if stepping is enabled */ + if (!DBGFIsStepping(pVCpu)) #endif - { - if ( VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK) - || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK)) { - VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_TO_R3); - STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatSwitchToR3); - rc = RT_UNLIKELY(VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)) ? VINF_EM_NO_MEMORY : VINF_EM_RAW_TO_R3; + if ( VM_FF_ISPENDING(pVM, VM_FF_HWACCM_TO_R3_MASK) + || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_HWACCM_TO_R3_MASK)) + { + VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_TO_R3); + STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatSwitchToR3); + STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); + rc = RT_UNLIKELY(VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)) ? VINF_EM_NO_MEMORY : VINF_EM_RAW_TO_R3; + goto end; + } + } + + /* Pending request packets might contain actions that need immediate attention, such as pending hardware interrupts. */ + if ( VM_FF_ISPENDING(pVM, VM_FF_REQUEST) + || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_REQUEST)) + { + STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); + rc = VINF_EM_PENDING_REQUEST; goto end; } - } - /* Pending request packets might contain actions that need immediate attention, such as pending hardware interrupts. */ - if ( VM_FF_ISPENDING(pVM, VM_FF_REQUEST) - || VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_REQUEST)) - { - rc = VINF_EM_PENDING_REQUEST; - goto end; + /* Check if a pgm pool flush is in progress. */ + if (VM_FF_ISPENDING(pVM, VM_FF_PGM_POOL_FLUSH_PENDING)) + { + STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatEntry, x); + rc = VINF_PGM_POOL_FLUSH_PENDING; + goto end; + } } #ifdef VBOX_WITH_VMMR0_DISABLE_PREEMPTION @@ -2889,7 +2915,6 @@ ResumeExecution: STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitShadowPF); TRPMResetTrap(pVCpu); - STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatExit2Sub3, y3); goto ResumeExecution; } @@ -3377,7 +3402,6 @@ ResumeExecution: STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitReasonNPF); TRPMResetTrap(pVCpu); - goto ResumeExecution; } @@ -3565,13 +3589,6 @@ ResumeExecution: AssertFailed(); break; } - /* Check if a sync operation is pending. */ - if ( rc == VINF_SUCCESS /* don't bother if we are going to ring 3 anyway */ - && VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_PGM_SYNC_CR3 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL)) - { - rc = PGMSyncCR3(pVCpu, pCtx->cr0, pCtx->cr3, pCtx->cr4, VMCPU_FF_ISSET(pVCpu, VMCPU_FF_PGM_SYNC_CR3)); - AssertRC(rc); - } break; case VMX_EXIT_QUALIFICATION_CRX_ACCESS_READ: diff --git a/src/VBox/VMM/VMMR0/VMMR0.cpp b/src/VBox/VMM/VMMR0/VMMR0.cpp index 3f08a64a9..a89e556f1 100644 --- a/src/VBox/VMM/VMMR0/VMMR0.cpp +++ b/src/VBox/VMM/VMMR0/VMMR0.cpp @@ -464,6 +464,9 @@ static void vmmR0RecordRC(PVM pVM, PVMCPU pVCpu, int rc) case VINF_PGM_CHANGE_MODE: STAM_COUNTER_INC(&pVM->vmm.s.StatRZRetPGMChangeMode); break; + case VINF_PGM_POOL_FLUSH_PENDING: + STAM_COUNTER_INC(&pVM->vmm.s.StatRZRetPGMFlushPending); + break; case VINF_EM_PENDING_REQUEST: STAM_COUNTER_INC(&pVM->vmm.s.StatRZRetPendingRequest); break; @@ -1263,16 +1266,19 @@ DECLEXPORT(bool) RTCALL RTAssertShouldPanic(void) { PVMCPU pVCpu = VMMGetCpu(pVM); + if (pVCpu) + { #ifdef RT_ARCH_X86 - if ( pVCpu->vmm.s.CallRing3JmpBufR0.eip - && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call) + if ( pVCpu->vmm.s.CallRing3JmpBufR0.eip + && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call) #else - if ( pVCpu->vmm.s.CallRing3JmpBufR0.rip - && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call) + if ( pVCpu->vmm.s.CallRing3JmpBufR0.rip + && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call) #endif - { - int rc = VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_VM_R0_ASSERTION, 0); - return RT_FAILURE_NP(rc); + { + int rc = VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_VM_R0_ASSERTION, 0); + return RT_FAILURE_NP(rc); + } } } #ifdef RT_OS_LINUX diff --git a/src/VBox/VMM/testcase/tstVMStructGC.cpp b/src/VBox/VMM/testcase/tstVMStructGC.cpp index c8dc22788..c0d3fa5e9 100644 --- a/src/VBox/VMM/testcase/tstVMStructGC.cpp +++ b/src/VBox/VMM/testcase/tstVMStructGC.cpp @@ -526,6 +526,8 @@ int main() GEN_CHECK_OFF(PGM, pMappingsR0); GEN_CHECK_OFF(PGM, fFinalizedMappings); GEN_CHECK_OFF(PGM, fMappingsFixed); + GEN_CHECK_OFF(PGM, fMappingsFixedRestored); + GEN_CHECK_OFF(PGM, fMappingsDisabled); GEN_CHECK_OFF(PGM, GCPtrMappingFixed); GEN_CHECK_OFF(PGM, cbMappingFixed); GEN_CHECK_OFF(PGM, pInterPD); diff --git a/src/libs/xpcom18a4/xpcom/threads/plevent.c b/src/libs/xpcom18a4/xpcom/threads/plevent.c index 035690289..742193df6 100644 --- a/src/libs/xpcom18a4/xpcom/threads/plevent.c +++ b/src/libs/xpcom18a4/xpcom/threads/plevent.c @@ -1215,6 +1215,13 @@ _pl_NativeNotify(PLEventQueue* self) PRInt32 count; unsigned char buf[] = { NOTIFY_TOKEN }; +# ifdef VBOX + /* Don't write two chars, because we'll only acknowledge one and that'll + cause trouble for anyone selecting/polling on the read descriptor. */ + if (self->notified) + return PR_SUCCESS; +# endif + PR_LOG(event_lm, PR_LOG_DEBUG, ("_pl_NativeNotify: self=%p", self)); diff --git a/src/recompiler/target-i386/op_helper.c b/src/recompiler/target-i386/op_helper.c index fc72fe128..05c436229 100644 --- a/src/recompiler/target-i386/op_helper.c +++ b/src/recompiler/target-i386/op_helper.c @@ -523,6 +523,10 @@ static void switch_tss(int tss_selector, stl_kernel(env->tr.base + (0x28 + 7 * 4), EDI); for(i = 0; i < 6; i++) stw_kernel(env->tr.base + (0x48 + i * 4), env->segs[i].selector); +#ifdef VBOX + /* Must store the ldt as it gets reloaded and might have been changed. */ + stw_kernel(env->tr.base + 0x60, env->ldt.selector); +#endif #if defined(VBOX) && defined(DEBUG) printf("TSS 32 bits switch\n"); printf("Saving CS=%08X\n", env->segs[R_CS].selector); @@ -541,6 +545,10 @@ static void switch_tss(int tss_selector, stw_kernel(env->tr.base + (0x12 + 7 * 2), EDI); for(i = 0; i < 4; i++) stw_kernel(env->tr.base + (0x22 + i * 4), env->segs[i].selector); +#ifdef VBOX + /* Must store the ldt as it gets reloaded and might have been changed. */ + stw_kernel(env->tr.base + 0x2a, env->ldt.selector); +#endif } /* now if an exception occurs, it will occurs in the next task -- cgit v1.2.3