hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/** @file
  System Firmware descriptor.
 
  Copyright (c) 2018, Hisilicon Limited. All rights reserved.
  Copyright (c) 2018, Linaro Limited. All rights reserved.
  Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
 
**/
 
#include <PiPei.h>
#include <Guid/EdkiiSystemFmpCapsule.h>
#include <Protocol/FirmwareManagement.h>
 
#define PACKAGE_VERSION                     0xFFFFFFFF
#define PACKAGE_VERSION_STRING              L"Unknown"
 
#define CURRENT_FIRMWARE_VERSION            0x00000002
#define CURRENT_FIRMWARE_VERSION_STRING     L"0x00000002"
#define LOWEST_SUPPORTED_FIRMWARE_VERSION   0x00000001
 
#define IMAGE_ID                            SIGNATURE_64('H','W','A', 'R', 'M', '_', 'F', 'd')
#define IMAGE_ID_STRING                     L"ARMPlatformFd"
 
// PcdSystemFmpCapsuleImageTypeIdGuid
#define IMAGE_TYPE_ID_GUID                  { 0x7978365d, 0x7978, 0x45fd, { 0xad, 0x77, 0xb2, 0x76, 0x93, 0xcf, 0xe8, 0x5b } }
 
typedef struct {
  EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR  Descriptor;
  // real string data
  CHAR16                                  ImageIdNameStr[ARRAY_SIZE (IMAGE_ID_STRING)];
  CHAR16                                  VersionNameStr[ARRAY_SIZE (CURRENT_FIRMWARE_VERSION_STRING)];
  CHAR16                                  PackageVersionNameStr[ARRAY_SIZE (PACKAGE_VERSION_STRING)];
} IMAGE_DESCRIPTOR;
 
IMAGE_DESCRIPTOR mImageDescriptor =
{
  {
    EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE,
    sizeof (EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR),
    sizeof (IMAGE_DESCRIPTOR),
    PACKAGE_VERSION,                                       // PackageVersion
    OFFSET_OF (IMAGE_DESCRIPTOR, PackageVersionNameStr),   // PackageVersionName
    1,                                                     // ImageIndex;
    {0x0},                                                 // Reserved
    IMAGE_TYPE_ID_GUID,                                    // ImageTypeId;
    IMAGE_ID,                                              // ImageId;
    OFFSET_OF (IMAGE_DESCRIPTOR, ImageIdNameStr),          // ImageIdName;
    CURRENT_FIRMWARE_VERSION,                              // Version;
    OFFSET_OF (IMAGE_DESCRIPTOR, VersionNameStr),          // VersionName;
    {0x0},                                                 // Reserved2
    FixedPcdGet32 (PcdFdSize),                             // Size;
    IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
      IMAGE_ATTRIBUTE_RESET_REQUIRED |
      IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED |
      IMAGE_ATTRIBUTE_IN_USE,                              // AttributesSupported;
    IMAGE_ATTRIBUTE_IMAGE_UPDATABLE |
      IMAGE_ATTRIBUTE_RESET_REQUIRED |
      IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED |
      IMAGE_ATTRIBUTE_IN_USE,                              // AttributesSetting;
    0x0,                                                   // Compatibilities;
    LOWEST_SUPPORTED_FIRMWARE_VERSION,                     // LowestSupportedImageVersion;
    0x00000000,                                            // LastAttemptVersion;
    0,                                                     // LastAttemptStatus;
    {0x0},                                                 // Reserved3
    0,                                                     // HardwareInstance;
  },
  // real string data
  {IMAGE_ID_STRING},
  {CURRENT_FIRMWARE_VERSION_STRING},
  {PACKAGE_VERSION_STRING},
};
 
VOID* CONST ReferenceAcpiTable = &mImageDescriptor;