summaryrefslogtreecommitdiff
path: root/Vlv2TbltDevicePkg/PlatformEsrt
diff options
context:
space:
mode:
Diffstat (limited to 'Vlv2TbltDevicePkg/PlatformEsrt')
-rw-r--r--Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.c140
-rw-r--r--Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.h32
-rw-r--r--Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.inf58
3 files changed, 230 insertions, 0 deletions
diff --git a/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.c b/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.c
new file mode 100644
index 0000000000..ee2def8c80
--- /dev/null
+++ b/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.c
@@ -0,0 +1,140 @@
+/** @file
+ Non-FMP ESRT Platform Driver to produce system firmware resource to ESRT
+
+ Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ 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.
+
+**/
+
+
+#include "PlatformEsrtDxe.h"
+
+
+
+EFI_SYSTEM_RESOURCE_ENTRY EsrtTemplateBuf[] = {
+ // System Firmware Entry
+ {
+ SYSTEM_FW_CLASS_GUID,
+ ESRT_FW_TYPE_SYSTEMFIRMWARE,
+ 0x0001,
+ 0x0001,
+ 0x0000,
+ 0x0000,
+ LAST_ATTEMPT_STATUS_SUCCESS
+ }
+};
+
+UINTN EsrtCount = sizeof(EsrtTemplateBuf) / sizeof(EFI_SYSTEM_RESOURCE_ENTRY);
+
+
+/**
+ Register all platform updatable firmware resourece to Esrt table
+
+ @param[in] Event The Event that is being processed.
+ @param[in] Context The Event Context.
+
+**/
+EFI_STATUS
+RegisterPlatformEsrtEntry()
+{
+ EFI_STATUS Status;
+ ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
+ UINTN Index;
+
+ Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtManagement);
+ if (EFI_ERROR(Status)) {
+ return Status;
+ }
+
+ for (Index = 0; Index < EsrtCount; Index++) {
+ Status = EsrtManagement->GetEsrtEntry(
+ &EsrtTemplateBuf[Index].FwClass,
+ &EsrtTemplateBuf[Index]
+ );
+ if (Status == EFI_NOT_FOUND) {
+ //
+ // Init EsrtEntry for system firmware updatable resource
+ //
+ Status = EsrtManagement->RegisterEsrtEntry(&EsrtTemplateBuf[Index]);
+ }
+ }
+
+ return Status;
+
+}
+
+
+/**
+ Notify function for protocol ESRT management protocol. This is used to
+ register system firmware updatable resourece to Esrt table
+
+ @param[in] Event The Event that is being processed.
+ @param[in] Context The Event Context.
+
+**/
+VOID
+EFIAPI
+PlatformEsrtNotifyFunction (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ EFI_STATUS Status;
+
+ Status = RegisterPlatformEsrtEntry();
+ DEBUG ((EFI_D_INFO, "PlatformEsrtDxe Status = 0x%x\n", Status));
+}
+
+
+EFI_STATUS
+EFIAPI
+PlatformEsrtDxeEntryPoint (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ EFI_EVENT Event;
+ VOID *Registration;
+ ESRT_MANAGEMENT_PROTOCOL *EsrtManagement;
+ UINTN Index;
+
+ for (Index = 0; Index < EsrtCount; Index++) {
+ EsrtTemplateBuf[Index].CapsuleFlags = PcdGet16(PcdSystemRebootAfterCapsuleProcessFlag);
+ }
+
+ Status = gBS->LocateProtocol(&gEsrtManagementProtocolGuid, NULL, (VOID **)&EsrtManagement);
+ if (!EFI_ERROR(Status)) {
+ //
+ // Directly Register Platform Updatable Resource
+ //
+ return RegisterPlatformEsrtEntry();
+ }
+
+ //
+ // Register Callback function for updating USB Rmrr address
+ //
+ Status = gBS->CreateEvent (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ PlatformEsrtNotifyFunction,
+ NULL,
+ &Event
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ Status = gBS->RegisterProtocolNotify(
+ &gEsrtManagementProtocolGuid,
+ Event,
+ &Registration
+ );
+
+ return EFI_SUCCESS;
+}
diff --git a/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.h b/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.h
new file mode 100644
index 0000000000..bcf1bc80be
--- /dev/null
+++ b/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.h
@@ -0,0 +1,32 @@
+/** @file
+ Header file for Non-FMP platform ESRT driver
+
+ Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
+
+ 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 _EFI_PLATFORM_ESRT_DXE_H_
+#define _EFI_PLATFORM_ESRT_DXE_H_
+
+#include <Guid/SystemResourceTable.h>
+#include <Guid/SystemFwClassGuid.h>
+
+#include <Library/PrintLib.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/DebugLib.h>
+
+#include <Protocol/EsrtManagement.h>
+
+#endif // #ifndef _EFI_PLATFORM_ESRT_DXE_H_
diff --git a/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.inf b/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.inf
new file mode 100644
index 0000000000..6ee110542c
--- /dev/null
+++ b/Vlv2TbltDevicePkg/PlatformEsrt/PlatformEsrtDxe.inf
@@ -0,0 +1,58 @@
+## @file
+# Component description file for platform ESRT module
+#
+#
+# Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>
+#
+# 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]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PlatformEsrtDxe
+ FILE_GUID = 0484EBBA-7D8F-48ae-8F98-A77E0961DEEA
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+ ENTRY_POINT = PlatformEsrtDxeEntryPoint
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC
+#
+
+[Sources]
+ PlatformEsrtDxe.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ Vlv2TbltDevicePkg/PlatformPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ BaseLib
+ BaseMemoryLib
+ MemoryAllocationLib
+ UefiLib
+ UefiBootServicesTableLib
+ UefiRuntimeServicesTableLib
+ DebugLib
+ PrintLib
+ PcdLib
+
+[Pcd]
+ gEfiMdeModulePkgTokenSpaceGuid.PcdSystemRebootAfterCapsuleProcessFlag ## CONSUMES
+
+[Protocols]
+ gEsrtManagementProtocolGuid ## CONSUMES
+
+[Guids]
+ gSystemFwClassGuid \ No newline at end of file