--- /dev/null
+/** @file\r
+ System Firmware descriptor.\r
+\r
+ Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiPei.h>\r
+#include <Protocol/FirmwareManagement.h>\r
+#include <Guid/EdkiiSystemFmpCapsule.h>\r
+\r
+#define PACKAGE_VERSION 0xFFFFFFFF\r
+#define PACKAGE_VERSION_STRING L"Unknown"\r
+\r
+#define CURRENT_FIRMWARE_VERSION 0x00000002\r
+#define CURRENT_FIRMWARE_VERSION_STRING L"0x00000002"\r
+#define LOWEST_SUPPORTED_FIRMWARE_VERSION 0x00000001\r
+\r
+#define IMAGE_ID SIGNATURE_64('V', 'L', 'V', '2', '_', '_', 'F', 'd')\r
+#define IMAGE_ID_STRING L"Vlv2Fd"\r
+\r
+// PcdSystemFmpCapsuleImageTypeIdGuid\r
+#define IMAGE_TYPE_ID_GUID { 0x4096267b, 0xda0a, 0x42eb, { 0xb5, 0xeb, 0xfe, 0xf3, 0x1d, 0x20, 0x7c, 0xb4 } }\r
+\r
+typedef struct {\r
+ EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR Descriptor;\r
+ // real string data\r
+ CHAR16 ImageIdNameStr[sizeof(IMAGE_ID_STRING)/sizeof(CHAR16)];\r
+ CHAR16 VersionNameStr[sizeof(CURRENT_FIRMWARE_VERSION_STRING)/sizeof(CHAR16)];\r
+ CHAR16 PackageVersionNameStr[sizeof(PACKAGE_VERSION_STRING)/sizeof(CHAR16)];\r
+} IMAGE_DESCRIPTOR;\r
+\r
+IMAGE_DESCRIPTOR mImageDescriptor =\r
+{\r
+ {\r
+ EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE,\r
+ sizeof(EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR),\r
+ sizeof(IMAGE_DESCRIPTOR),\r
+ PACKAGE_VERSION, // PackageVersion\r
+ OFFSET_OF (IMAGE_DESCRIPTOR, PackageVersionNameStr), // PackageVersionName\r
+ 1, // ImageIndex;\r
+ {0x0}, // Reserved\r
+ IMAGE_TYPE_ID_GUID, // ImageTypeId;\r
+ IMAGE_ID, // ImageId;\r
+ OFFSET_OF (IMAGE_DESCRIPTOR, ImageIdNameStr), // ImageIdName;\r
+ CURRENT_FIRMWARE_VERSION, // Version;\r
+ OFFSET_OF (IMAGE_DESCRIPTOR, VersionNameStr), // VersionName;\r
+ {0x0}, // Reserved2\r
+ FixedPcdGet32(PcdFlashAreaSize), // Size;\r
+ IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |\r
+ IMAGE_ATTRIBUTE_RESET_REQUIRED |\r
+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED |\r
+ IMAGE_ATTRIBUTE_IN_USE, // AttributesSupported;\r
+ IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |\r
+ IMAGE_ATTRIBUTE_RESET_REQUIRED |\r
+ IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED |\r
+ IMAGE_ATTRIBUTE_IN_USE, // AttributesSetting;\r
+ 0x0, // Compatibilities;\r
+ LOWEST_SUPPORTED_FIRMWARE_VERSION, // LowestSupportedImageVersion;\r
+ 0x00000000, // LastAttemptVersion;\r
+ 0, // LastAttemptStatus;\r
+ {0x0}, // Reserved3\r
+ 0, // HardwareInstance;\r
+ },\r
+ // real string data\r
+ {IMAGE_ID_STRING},\r
+ {CURRENT_FIRMWARE_VERSION_STRING},\r
+ {PACKAGE_VERSION_STRING},\r
+};\r
+\r
+\r
+VOID*\r
+ReferenceAcpiTable (\r
+ VOID\r
+ )\r
+{\r
+ //\r
+ // Reference the table being generated to prevent the optimizer from\r
+ // removing the data structure from the executable\r
+ //\r
+ return (VOID*)&mImageDescriptor;\r
+}\r
--- /dev/null
+## @file\r
+# System Firmware descriptor.\r
+#\r
+# Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+# This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+#\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+##\r
+\r
+[Defines]\r
+ INF_VERSION = 0x00010005\r
+ BASE_NAME = SystemFirmwareDescriptor\r
+ FILE_GUID = 90B2B846-CA6D-4D6E-A8D3-C140A8E110AC\r
+ MODULE_TYPE = PEIM\r
+ VERSION_STRING = 1.0\r
+ ENTRY_POINT = SystemFirmwareDescriptorPeimEntry\r
+\r
+[Sources]\r
+ SystemFirmwareDescriptorPei.c\r
+ SystemFirmwareDescriptor.aslc\r
+\r
+[Packages]\r
+ MdePkg/MdePkg.dec\r
+ MdeModulePkg/MdeModulePkg.dec\r
+ SignedCapsulePkg/SignedCapsulePkg.dec\r
+ Vlv2TbltDevicePkg/PlatformPkg.dec\r
+\r
+[LibraryClasses]\r
+ PcdLib\r
+ PeiServicesLib\r
+ DebugLib\r
+ PeimEntryPoint\r
+\r
+[FixedPcd]\r
+ gPlatformModuleTokenSpaceGuid.PcdFlashAreaSize\r
+\r
+[Pcd]\r
+ gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor\r
+\r
+[Depex]\r
+ TRUE\r
--- /dev/null
+/** @file\r
+ System Firmware descriptor producer.\r
+\r
+ Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiPei.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Protocol/FirmwareManagement.h>\r
+#include <Guid/EdkiiSystemFmpCapsule.h>\r
+\r
+/**\r
+ Entrypoint for SystemFirmwareDescriptor PEIM.\r
+\r
+ @param[in] FileHandle Handle of the file being invoked.\r
+ @param[in] PeiServices Describes the list of possible PEI Services.\r
+\r
+ @retval EFI_SUCCESS PPI successfully installed.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SystemFirmwareDescriptorPeimEntry (\r
+ IN EFI_PEI_FILE_HANDLE FileHandle,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *Descriptor;\r
+ UINTN Size;\r
+ UINTN Index;\r
+ UINT32 AuthenticationStatus;\r
+\r
+ //\r
+ // Search RAW section.\r
+ //\r
+ Index = 0;\r
+ while (TRUE) {\r
+ Status = PeiServicesFfsFindSectionData3(EFI_SECTION_RAW, Index, FileHandle, (VOID **)&Descriptor, &AuthenticationStatus);\r
+ if (EFI_ERROR(Status)) {\r
+ // Should not happen, must something wrong in FDF.\r
+ ASSERT(FALSE);\r
+ return EFI_NOT_FOUND;\r
+ }\r
+ if (Descriptor->Signature == EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE) {\r
+ break;\r
+ }\r
+ Index++;\r
+ }\r
+\r
+ DEBUG((DEBUG_INFO, "EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR size - 0x%x\n", Descriptor->Length));\r
+\r
+ Size = Descriptor->Length;\r
+ PcdSetPtrS (PcdEdkiiSystemFirmwareImageDescriptor, &Size, Descriptor);\r
+\r
+ return EFI_SUCCESS;\r
+}\r