--- /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('Q', 'U', 'A', 'R', 'K', '_', 'F', 'd')\r
+#define IMAGE_ID_STRING L"QuarkPlatformFd"\r
+\r
+// PcdSystemFmpCapsuleImageTypeIdGuid\r
+#define IMAGE_TYPE_ID_GUID { 0x62af20c0, 0x7016, 0x424a, { 0x9b, 0xf8, 0x9c, 0xcc, 0x86, 0x58, 0x40, 0x90 } }\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