summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-11 08:17:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-11 08:17:27 +0000
commitf215e02bf85f68d3a6106c2a1f4f7f063f819064 (patch)
tree6bb5b92c046312c4e95ac2620b10ddf482d3fa8b /src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe
parentInitial commit. (diff)
downloadvirtualbox-f215e02bf85f68d3a6106c2a1f4f7f063f819064.tar.xz
virtualbox-f215e02bf85f68d3a6106c2a1f4f7f063f819064.zip
Adding upstream version 7.0.14-dfsg.upstream/7.0.14-dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe')
-rw-r--r--src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/README4
-rw-r--r--src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c155
-rw-r--r--src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h75
-rw-r--r--src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf83
-rw-r--r--src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h39
5 files changed, 356 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/README b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/README
new file mode 100644
index 00000000..3b748de5
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/README
@@ -0,0 +1,4 @@
+This module isn't supposed to be used in normal UEFI functioning.
+It used in case guest expects some undocumented UEFI interface and
+this module helps in stubbing and simulating these interfaces and investigation of
+guest behavior changes.
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c
new file mode 100644
index 00000000..2e48bb42
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.c
@@ -0,0 +1,155 @@
+/* $Id: VBoxMimicry.c $ */
+/** @file
+ * VBoxMimicry.c - Mimic table entry.
+ */
+
+/*
+ * Copyright (C) 2009-2023 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+ * in the VirtualBox 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.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+ */
+
+#include "VBoxMimicry.h"
+#define VBOX_MIMICRY_VAR L"VBOX_MIMICRY"
+
+/*610467a0-d8a7-11de-a911-87667af93b7d*/
+static EFI_GUID gVBoxMimicryVarGuid = { 0x610467a0, 0xd8a7, 0x11de, {0xa9, 0x11, 0x87, 0x66, 0x7a, 0xf9, 0x3b, 0x7d}};
+
+#define MIM_TBL_ENTRY(name, guid) DO_9_FAKE_DECL(name)
+#include "mimic_tbl.h"
+#undef MIM_TBL_ENTRY
+
+#define MIM_TBL_ENTRY(name, guid) \
+static EFI_GUID gFake ## name = guid; \
+static void *gFuncArray_ ## name [] = \
+{ \
+ name ## _fake_impl0, \
+ name ## _fake_impl1, \
+ name ## _fake_impl2, \
+ name ## _fake_impl3, \
+ name ## _fake_impl4, \
+ name ## _fake_impl5, \
+ name ## _fake_impl6, \
+ name ## _fake_impl7, \
+ name ## _fake_impl8, \
+ name ## _fake_impl9 \
+};
+#include "mimic_tbl.h"
+#undef MIM_TBL_ENTRY
+
+#define MIM_TBL_ENTRY(name, guid) \
+FAKE_IMPL(name ## _fake_impl0, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl1, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl2, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl3, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl4, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl5, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl6, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl7, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl8, gFake ## name) \
+FAKE_IMPL(name ## _fake_impl9, gFake ## name)
+#include "mimic_tbl.h"
+#undef MIM_TBL_ENTRY
+
+
+
+EFI_STATUS
+EFIAPI
+VBoxMimicryInit(EFI_HANDLE hImage, EFI_SYSTEM_TABLE *pSysTable)
+{
+ /* Set'n'check intercept variable */
+ EFI_STATUS r;
+ UINT32 val;
+ UINTN size = sizeof(UINT32);
+ r = gRT->GetVariable(VBOX_MIMICRY_VAR, &gVBoxMimicryVarGuid, NULL, &size, &val);
+ if ( EFI_ERROR(r)
+ && r == EFI_NOT_FOUND)
+ {
+ size = sizeof(UINT32);
+ val = 1;
+ r = gRT->SetVariable(VBOX_MIMICRY_VAR, &gVBoxMimicryVarGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, size, &val);
+ if (EFI_ERROR(r))
+ {
+ DEBUG((DEBUG_INFO, "%a:%d - %r\n", __FILE__, __LINE__, r));
+ return r;
+ }
+ gThis = AllocateZeroPool(sizeof(VBOXMIMICRY));
+ r = install_mimic_interfaces();
+ if(EFI_ERROR(r))
+ {
+ DEBUG((DEBUG_INFO, "%a:%d - %r\n", __FILE__, __LINE__, r));
+ return r;
+ }
+ gThis->hImage = hImage;
+ return r;
+ }
+ if (!EFI_ERROR(r))
+ {
+ return EFI_ALREADY_STARTED;
+ }
+ return r;
+}
+
+EFI_STATUS
+EFIAPI
+VBoxMimicryFini(EFI_HANDLE hImage)
+{
+ EFI_STATUS r;
+ uninstall_mimic_interfaces();
+ FreePool(gThis);
+ r = gRT->SetVariable(VBOX_MIMICRY_VAR, &gVBoxMimicryVarGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, 0, NULL);
+ if (EFI_ERROR(r))
+ {
+ DEBUG((DEBUG_INFO, "%a:%d - %r\n", __FILE__, __LINE__, r));
+ return r;
+ }
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS install_mimic_interfaces()
+{
+ EFI_STATUS Status;
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &gThis->hImage,
+#define MIM_TBL_ENTRY(name, guid) gFake##name, gFuncArray_##name,
+#include "mimic_tbl.h"
+#undef MIM_TBL_ENTRY
+ NULL);
+ return Status;
+}
+EFI_STATUS uninstall_mimic_interfaces()
+{
+ EFI_STATUS Status;
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &gThis->hImage,
+#define MIM_TBL_ENTRY(name, guid) gFake##name,
+#include "mimic_tbl.h"
+#undef MIM_TBL_ENTRY
+ NULL);
+ return Status;
+}
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h
new file mode 100644
index 00000000..c14c3bf7
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicry.h
@@ -0,0 +1,75 @@
+/* $Id: VBoxMimicry.h $ */
+/** @file
+ * VBoxMimicry.h - Debug and logging routines implemented by VBoxDebugLib.
+ */
+
+/*
+ * Copyright (C) 2009-2023 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+ * in the VirtualBox 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.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+ */
+
+
+#ifndef __VBOXMIMICRY_H__
+#define __VBOXMIMICRY_H__
+#include <Uefi.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/DebugLib.h>
+
+#define MIMICRY_INTERFACE_COUNT 1
+#define DO_9_FAKE_DECL(name) \
+static EFI_STATUS name ## _fake_impl0(); \
+static EFI_STATUS name ## _fake_impl1(); \
+static EFI_STATUS name ## _fake_impl2(); \
+static EFI_STATUS name ## _fake_impl3(); \
+static EFI_STATUS name ## _fake_impl4(); \
+static EFI_STATUS name ## _fake_impl5(); \
+static EFI_STATUS name ## _fake_impl6(); \
+static EFI_STATUS name ## _fake_impl7(); \
+static EFI_STATUS name ## _fake_impl8(); \
+static EFI_STATUS name ## _fake_impl9();
+
+#define FAKE_IMPL(name, guid) \
+static EFI_STATUS name () \
+{ \
+ DEBUG((DEBUG_INFO, #name ": of %g called\n", &guid)); \
+ return EFI_SUCCESS; \
+}
+
+typedef struct
+{
+ EFI_HANDLE hImage;
+} VBOXMIMICRY, *PVBOXMIMICRY;
+
+PVBOXMIMICRY gThis;
+
+EFI_STATUS install_mimic_interfaces();
+EFI_STATUS uninstall_mimic_interfaces();
+#endif
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf
new file mode 100644
index 00000000..e2a473e9
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/VBoxMimicryDxe.inf
@@ -0,0 +1,83 @@
+# $Id: VBoxMimicryDxe.inf $ */
+#* @file
+# VBoxMimicryDxe.inf - Mimic module declaration.
+
+
+#
+# Copyright (C) 2009-2023 Oracle and/or its affiliates.
+#
+# This file is part of VirtualBox base platform packages, as
+# available from https://www.virtualbox.org.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation, in version 3 of the
+# License.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses>.
+#
+# The contents of this file may alternatively be used under the terms
+# of the Common Development and Distribution License Version 1.0
+# (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+# in the VirtualBox 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.
+#
+# SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+#
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = VBoxMimicryDxe
+ FILE_GUID = f346c474-d8a6-11de-9504-0fc338e40fda
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = VBoxMimicryInit
+ UNLOAD_IMAGE = VBoxMimicryFini
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[Sources.common]
+ VBoxMimicry.c
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+
+[LibraryClasses]
+ BaseLib
+ MemoryAllocationLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ UefiRuntimeServicesTableLib
+ BaseMemoryLib
+ DebugLib
+ HiiLib
+ PrintLib
+
+[Guids]
+ gEfiIfrTianoGuid ## CONSUMES ## Guid
+
+[Protocols]
+ gEfiHiiStringProtocolGuid ## CONSUMES
+ gEfiHiiConfigRoutingProtocolGuid ## CONSUMES
+ gEfiHiiConfigAccessProtocolGuid ## PRODUCES
+ gEfiFormBrowser2ProtocolGuid ## CONSUMES
+ gEfiHiiDatabaseProtocolGuid ## CONSUMES
+
+
+[Depex]
+ gEfiSimpleTextOutProtocolGuid AND gEfiHiiDatabaseProtocolGuid AND gEfiVariableArchProtocolGuid AND gEfiVariableWriteArchProtocolGuid
+
diff --git a/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h
new file mode 100644
index 00000000..304c2289
--- /dev/null
+++ b/src/VBox/Devices/EFI/Firmware/VBoxPkg/VBoxMimicryDxe/mimic_tbl.h
@@ -0,0 +1,39 @@
+/* $Id: mimic_tbl.h $ */
+/** @file
+ * mimic_tbl.h - Mimic table.
+ */
+
+/*
+ * Copyright (C) 2009-2023 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+ * in the VirtualBox 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.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+ */
+
+/*4DF19259-DC71-4D46-BEF1-357BB578C418*/
+#define WIN7_0_GUID {0x4df19259, 0xdc71, 0x4d46, {0xbe, 0xf1, 0x35, 0x7b, 0xb5, 0x78, 0xc4, 0x18}}
+MIM_TBL_ENTRY(win7_0, WIN7_0_GUID)