Home | History | Annotate | Download | only in SystemFirmwareDescriptor
      1 /** @file
      2   System Firmware descriptor.
      3 
      4   Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #include <PiPei.h>
     16 #include <Protocol/FirmwareManagement.h>
     17 #include <Guid/EdkiiSystemFmpCapsule.h>
     18 
     19 #define PACKAGE_VERSION                     0xFFFFFFFF
     20 #define PACKAGE_VERSION_STRING              L"Unknown"
     21 
     22 #define CURRENT_FIRMWARE_VERSION            0x00000002
     23 #define CURRENT_FIRMWARE_VERSION_STRING     L"0x00000002"
     24 #define LOWEST_SUPPORTED_FIRMWARE_VERSION   0x00000001
     25 
     26 #define IMAGE_ID                            SIGNATURE_64('V', 'L', 'V', '2', '_', '_', 'F', 'd')
     27 #define IMAGE_ID_STRING                     L"Vlv2Fd"
     28 
     29 // PcdSystemFmpCapsuleImageTypeIdGuid
     30 #define IMAGE_TYPE_ID_GUID                  { 0x4096267b, 0xda0a, 0x42eb, { 0xb5, 0xeb, 0xfe, 0xf3, 0x1d, 0x20, 0x7c, 0xb4 } }
     31 
     32 typedef struct {
     33   EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR  Descriptor;
     34   // real string data
     35   CHAR16                                  ImageIdNameStr[sizeof(IMAGE_ID_STRING)/sizeof(CHAR16)];
     36   CHAR16                                  VersionNameStr[sizeof(CURRENT_FIRMWARE_VERSION_STRING)/sizeof(CHAR16)];
     37   CHAR16                                  PackageVersionNameStr[sizeof(PACKAGE_VERSION_STRING)/sizeof(CHAR16)];
     38 } IMAGE_DESCRIPTOR;
     39 
     40 IMAGE_DESCRIPTOR mImageDescriptor =
     41 {
     42   {
     43     EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE,
     44     sizeof(EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR),
     45     sizeof(IMAGE_DESCRIPTOR),
     46     PACKAGE_VERSION,                                       // PackageVersion
     47     OFFSET_OF (IMAGE_DESCRIPTOR, PackageVersionNameStr),   // PackageVersionName
     48     1,                                                     // ImageIndex;
     49     {0x0},                                                 // Reserved
     50     IMAGE_TYPE_ID_GUID,                                    // ImageTypeId;
     51     IMAGE_ID,                                              // ImageId;
     52     OFFSET_OF (IMAGE_DESCRIPTOR, ImageIdNameStr),          // ImageIdName;
     53     CURRENT_FIRMWARE_VERSION,                              // Version;
     54     OFFSET_OF (IMAGE_DESCRIPTOR, VersionNameStr),          // VersionName;
     55     {0x0},                                                 // Reserved2
     56     FixedPcdGet32(PcdFlashAreaSize),                       // Size;
     57     IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
     58       IMAGE_ATTRIBUTE_RESET_REQUIRED |
     59       IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED |
     60       IMAGE_ATTRIBUTE_IN_USE,                              // AttributesSupported;
     61     IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
     62       IMAGE_ATTRIBUTE_RESET_REQUIRED |
     63       IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED |
     64       IMAGE_ATTRIBUTE_IN_USE,                              // AttributesSetting;
     65     0x0,                                                   // Compatibilities;
     66     LOWEST_SUPPORTED_FIRMWARE_VERSION,                     // LowestSupportedImageVersion;
     67     0x00000000,                                            // LastAttemptVersion;
     68     0,                                                     // LastAttemptStatus;
     69     {0x0},                                                 // Reserved3
     70     0,                                                     // HardwareInstance;
     71   },
     72   // real string data
     73   {IMAGE_ID_STRING},
     74   {CURRENT_FIRMWARE_VERSION_STRING},
     75   {PACKAGE_VERSION_STRING},
     76 };
     77 
     78 
     79 VOID*
     80 ReferenceAcpiTable (
     81   VOID
     82   )
     83 {
     84   //
     85   // Reference the table being generated to prevent the optimizer from
     86   // removing the data structure from the executable
     87   //
     88   return (VOID*)&mImageDescriptor;
     89 }
     90