diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib')
3 files changed, 150 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DpcLib.c b/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DpcLib.c new file mode 100644 index 00000000..87105b21 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DpcLib.c @@ -0,0 +1,94 @@ +/** @file + Help functions to access UDP service. + +Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <Uefi.h> +#include <Library/DebugLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Protocol/Dpc.h> + +// +// Pointer to the DPC Protocol +// +EFI_DPC_PROTOCOL *mDpc; + +/** + This constructor function caches the EFI_DPC_PROTOCOL pointer. + + @param[in] ImageHandle The firmware allocated handle for the EFI image. + @param[in] SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The constructor always return EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +DpcLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + // + // Locate the EFI_DPC_PROTOCOL in the handle database + // + Status = gBS->LocateProtocol (&gEfiDpcProtocolGuid, NULL, (VOID **)&mDpc); + ASSERT_EFI_ERROR (Status); + + return Status; +} + +/** + Add a Deferred Procedure Call to the end of the DPC queue. + + @param[in] DpcTpl The EFI_TPL that the DPC should be invoked. + @param[in] DpcProcedure Pointer to the DPC's function. + @param[in] DpcContext Pointer to the DPC's context. Passed to DpcProcedure + when DpcProcedure is invoked. + + @retval EFI_SUCCESS The DPC was queued. + @retval EFI_INVALID_PARAMETER DpcTpl is not a valid EFI_TPL. + @retval EFI_INVALID_PARAMETER DpcProcedure is NULL. + @retval EFI_OUT_OF_RESOURCES There are not enough resources available to + add the DPC to the queue. + +**/ +EFI_STATUS +EFIAPI +QueueDpc ( + IN EFI_TPL DpcTpl, + IN EFI_DPC_PROCEDURE DpcProcedure, + IN VOID *DpcContext OPTIONAL + ) +{ + // + // Call the EFI_DPC_PROTOCOL to queue the DPC + // + return mDpc->QueueDpc (mDpc, DpcTpl, DpcProcedure, DpcContext); +} + +/** + Dispatch the queue of DPCs. ALL DPCs that have been queued with a DpcTpl + value greater than or equal to the current TPL are invoked in the order that + they were queued. DPCs with higher DpcTpl values are invoked before DPCs with + lower DpcTpl values. + + @retval EFI_SUCCESS One or more DPCs were invoked. + @retval EFI_NOT_FOUND No DPCs were invoked. + +**/ +EFI_STATUS +EFIAPI +DispatchDpc ( + VOID + ) +{ + // + // Call the EFI_DPC_PROTOCOL to dispatch previously queued DPCs + // + return mDpc->DispatchDpc (mDpc); +} diff --git a/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf b/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf new file mode 100644 index 00000000..7e980781 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf @@ -0,0 +1,40 @@ +## @file +# This library instance provides DPC service by consuming EFI DPC Protocol. +# +# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = DxeDpcLib + MODULE_UNI_FILE = DxeDpcLib.uni + FILE_GUID = 38897D86-FF36-4472-AE64-1DB9AE715C81 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DpcLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER + CONSTRUCTOR = DpcLibConstructor + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 EBC +# + +[Sources] + DpcLib.c + +[Packages] + MdePkg/MdePkg.dec + NetworkPkg/NetworkPkg.dec + +[LibraryClasses] + DebugLib + UefiBootServicesTableLib + +[Protocols] + gEfiDpcProtocolGuid ## CONSUMES + +[Depex.common.DXE_DRIVER, Depex.common.DXE_RUNTIME_DRIVER, Depex.common.DXE_SAL_DRIVER, Depex.common.DXE_SMM_DRIVER] + gEfiDpcProtocolGuid diff --git a/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DxeDpcLib.uni b/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DxeDpcLib.uni new file mode 100644 index 00000000..3105bbcf --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/NetworkPkg/Library/DxeDpcLib/DxeDpcLib.uni @@ -0,0 +1,16 @@ +// /** @file
+// This library instance provides DPC service by consuming EFI DPC Protocol.
+//
+// This library instance provides the DPC service by consuming EFI DPC Protocol.
+//
+// Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+
+#string STR_MODULE_ABSTRACT #language en-US "Provides the DPC service by consuming EFI DPC Protocol"
+
+#string STR_MODULE_DESCRIPTION #language en-US "This library instance provides the DPC service by consuming EFI DPC Protocol."
+
|