| 1 | ## @file\r |
| 2 | # Firmware Management Protocol Device Package\r |
| 3 | #\r |
| 4 | # This package provides an implementation of a Firmware Management Protocol\r |
| 5 | # instance that supports the update of firmware storage devices using UEFI\r |
| 6 | # Capsules. The behavior of the Firmware Management Protocol instance is\r |
| 7 | # customized using libraries and PCDs.\r |
| 8 | #\r |
| 9 | # Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>\r |
| 10 | # Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>\r |
| 11 | #\r |
| 12 | # SPDX-License-Identifier: BSD-2-Clause-Patent\r |
| 13 | #\r |
| 14 | ##\r |
| 15 | \r |
| 16 | [Defines]\r |
| 17 | DEC_SPECIFICATION = 0x00010005\r |
| 18 | PACKAGE_NAME = FmpDevicePkg\r |
| 19 | PACKAGE_UNI_FILE = FmpDevicePkg.uni\r |
| 20 | PACKAGE_GUID = 080b5b4f-27c6-11e8-84d1-f8597177a00a\r |
| 21 | PACKAGE_VERSION = 0.1\r |
| 22 | \r |
| 23 | [Includes]\r |
| 24 | Include\r |
| 25 | \r |
| 26 | [Includes.Common.Private]\r |
| 27 | PrivateInclude\r |
| 28 | \r |
| 29 | [LibraryClasses]\r |
| 30 | ## @libraryclass Provides platform policy services used during a capsule\r |
| 31 | # update.\r |
| 32 | CapsuleUpdatePolicyLib|Include/Library/CapsuleUpdatePolicyLib.h\r |
| 33 | \r |
| 34 | ## @libraryclass Provides firmware device specific services to support\r |
| 35 | # updates of a firmware image stored in a firmware device.\r |
| 36 | FmpDeviceLib|Include/Library/FmpDeviceLib.h\r |
| 37 | \r |
| 38 | ## @libraryclass Provides generic services to support capsule dependency\r |
| 39 | # expression evaluation.\r |
| 40 | FmpDependencyLib|Include/Library/FmpDependencyLib.h\r |
| 41 | \r |
| 42 | ## @libraryclass Provides platform specific services to support dependency\r |
| 43 | # check during update of firmware image.\r |
| 44 | FmpDependencyCheckLib|Include/Library/FmpDependencyCheckLib.h\r |
| 45 | \r |
| 46 | ## @libraryclass Provides firmware device specific services to support\r |
| 47 | # saving dependency to firmware device and getting dependency\r |
| 48 | # from firmware device.\r |
| 49 | FmpDependencyDeviceLib|Include/Library/FmpDependencyDeviceLib.h\r |
| 50 | \r |
| 51 | [LibraryClasses.Common.Private]\r |
| 52 | ## @libraryclass Provides services to retrieve values from a capsule's FMP\r |
| 53 | # Payload Header. The structure is not included in the\r |
| 54 | # library class. Instead, services are provided to retrieve\r |
| 55 | # information from the FMP Payload Header. If information is\r |
| 56 | # added to the FMP Payload Header, then new services may be\r |
| 57 | # added to this library class to retrieve the new information.\r |
| 58 | FmpPayloadHeaderLib|PrivateInclude/Library/FmpPayloadHeaderLib.h\r |
| 59 | \r |
| 60 | [Guids]\r |
| 61 | ## Firmware Management Protocol Device Package Token Space GUID\r |
| 62 | gFmpDevicePkgTokenSpaceGuid = { 0x40b2d964, 0xfe11, 0x40dc, { 0x82, 0x83, 0x2e, 0xfb, 0xda, 0x29, 0x53, 0x56 } }\r |
| 63 | \r |
| 64 | [Protocols.Common.Private]\r |
| 65 | ## Capsule Update Policy Protocol\r |
| 66 | gEdkiiCapsuleUpdatePolicyProtocolGuid = { 0x487784c5, 0x6299, 0x4ba6, { 0xb0, 0x96, 0x5c, 0xc5, 0x27, 0x7c, 0xf7, 0x57 } }\r |
| 67 | \r |
| 68 | [PcdsFeatureFlag]\r |
| 69 | ## Indicates if the Firmware Management Protocol supports access to\r |
| 70 | # to a firmware storage device. If set to FALSE, then only GetImageInfo()\r |
| 71 | # is supported. This is used by FMP drivers that require the smallest\r |
| 72 | # possible Firmware Management Protocol implementation that supports\r |
| 73 | # advertising the updatable firmware device in the ESRT.<BR>\r |
| 74 | # TRUE - All Firmware Management Protocol services supported.<BR>\r |
| 75 | # FALSE - Firmware Management Protocol returns EFI_UNSUPPORTED for\r |
| 76 | # all services except GetImageInfo().<BR>\r |
| 77 | # @Prompt Firmware Device Storage Access Enabled.\r |
| 78 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceStorageAccessEnable|TRUE|BOOLEAN|0x40000011\r |
| 79 | \r |
| 80 | [PcdsFixedAtBuild]\r |
| 81 | ## The SHA-256 hash of a PKCS7 test key that is used to detect if a test key\r |
| 82 | # is being used to authenticate capsules. Test key detection is disabled by\r |
| 83 | # setting the value to {0}.\r |
| 84 | # @Prompt SHA-256 hash of PKCS7 test key.\r |
| 85 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceTestKeySha256Digest|{0x2E, 0x97, 0x89, 0x1B, 0xDB, 0xE7, 0x08, 0xAA, 0x8C, 0xB2, 0x8F, 0xAD, 0x20, 0xA9, 0x83, 0xC7, 0x84, 0x7D, 0x4F, 0xEE, 0x48, 0x25, 0xE9, 0x4D, 0x39, 0xFA, 0x34, 0x9A, 0xB8, 0xB1, 0xC4, 0x26}|VOID*|0x40000009\r |
| 86 | \r |
| 87 | [PcdsFixedAtBuild, PcdsPatchableInModule]\r |
| 88 | ## The color of the progress bar during a firmware update. Each firmware\r |
| 89 | # device can set its own color. The default color is white.<BR><BR>\r |
| 90 | # Bits 7..0 - Red<BR>\r |
| 91 | # Bits 15..8 - Green<BR>\r |
| 92 | # Bits 23..16 - Blue<BR>\r |
| 93 | # @Prompt Firmware Device Progress Bar Color.\r |
| 94 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressColor|0x00FFFFFF|UINT32|0x40000004\r |
| 95 | \r |
| 96 | ## The Null-terminated Unicode string used to fill in the ImageIdName field of\r |
| 97 | # the EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the\r |
| 98 | # GetImageInfo() service of the Firmware Management Protocol for the firmware\r |
| 99 | # device. An ImageIdName string must be provided for each firmware device.\r |
| 100 | # The default value is an empty string.\r |
| 101 | # @Prompt Firmware Device ImageIdName string.\r |
| 102 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageIdName|L""|VOID*|0x40000007\r |
| 103 | \r |
| 104 | ## The build time value used to fill in the LowestSupportedVersion field of\r |
| 105 | # the EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the\r |
| 106 | # GetImageInfo() service of the Firmware Management Protocol. This value is\r |
| 107 | # only used if the firmware device does not provide a method to report the\r |
| 108 | # lowest supported version value from the current firmware image and the\r |
| 109 | # UEFI variable used to provide the lowest supported version value does not\r |
| 110 | # exist. The default value is 0.\r |
| 111 | # @Prompt Build Time Firmware Device Lowest Support Version.\r |
| 112 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceBuildTimeLowestSupportedVersion|0x0|UINT32|0x4000000C\r |
| 113 | \r |
| 114 | ## The time in seconds to arm a watchdog timer during the update of a firmware\r |
| 115 | # device. The watchdog is re-armed each time the FmpDeviceLib calls the\r |
| 116 | # Progress() function passed into FmpDeviceSetImage() function. The\r |
| 117 | # FmpDeviceLib calls Progress() to update the percent completion of a\r |
| 118 | # firmware update. If the watchdog timer expires, the system reboots. A\r |
| 119 | # value of 0 disables the watchdog timer. The default value is 0 (watchdog\r |
| 120 | # disabled).\r |
| 121 | # @Prompt Firmware Device Watchdog Time in Seconds.\r |
| 122 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceProgressWatchdogTimeInSeconds|0x0|UINT8|0x4000000D\r |
| 123 | \r |
| 124 | ## The Image Type ID to use if one is not provided by FmpDeviceLib. If this\r |
| 125 | # PCD is not a valid GUID value, then gEfiCallerIdGuid is used.\r |
| 126 | # @Prompt Firmware Device Image Type ID\r |
| 127 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceImageTypeIdGuid|{0}|VOID*|0x40000010\r |
| 128 | \r |
| 129 | [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]\r |
| 130 | ## One or more PKCS7 certificates used to verify a firmware device capsule\r |
| 131 | # update image. Encoded using the Variable-Length Opaque Data format of RFC\r |
| 132 | # 4506 External Data Representation Standard (XDR). The default value is\r |
| 133 | # empty with 0 certificates.\r |
| 134 | # @Prompt One or more XDR encoded PKCS7 certificates used to verify firmware device capsule update images.\r |
| 135 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDevicePkcs7CertBufferXdr|{0x0}|VOID*|0x4000000E\r |
| 136 | \r |
| 137 | ## An event GUID that locks the firmware device when the event is signaled.\r |
| 138 | # If this PCD is not a valid GUID value, then the firmware device is locked\r |
| 139 | # when gEfiEndOfDxeEventGroupGuid (End of DXE Phase) is signaled. The\r |
| 140 | # default value is empty, so by default the firmware device is locked at the\r |
| 141 | # end of the DXE phase.\r |
| 142 | # @Prompt Firmware Device Lock Event GUID.\r |
| 143 | gFmpDevicePkgTokenSpaceGuid.PcdFmpDeviceLockEventGuid|{0}|VOID*|0x4000000F\r |
| 144 | \r |
| 145 | [UserExtensions.TianoCore."ExtraFiles"]\r |
| 146 | FmpDevicePkgExtra.uni\r |