MdeModulePkg/CapsuleRuntimeDxe: Introduce PCD to control this feature.

https://github.com/tianocore/tianocore.github.io/wiki/UEFI-Capsule-
on-Disk-Introducation

Introduce PcdCapsuleInRamSupport to turn on/off Capsule In Ram feature.
Platform could choose to drop CapsulePei/CapsuleX64 and not to support
Capsule In Ram.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Chao B Zhang <chao.b.zhang@intel.com>
Signed-off-by: Wei6 Xu <wei6.xu@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
Reviewed-by: Chao B Zhang <chao.b.zhang@intel.com>
This commit is contained in:
Wei6 Xu 2019-06-20 00:27:09 +08:00 committed by Zhang, Chao B
parent fd72860895
commit 7837d12498
2 changed files with 12 additions and 1 deletions

View File

@ -90,6 +90,7 @@
[Pcd] [Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule ## SOMETIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizeNonPopulateCapsule ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule ## SOMETIMES_CONSUMES # Populate Image requires reset support. gEfiMdeModulePkgTokenSpaceGuid.PcdMaxSizePopulateCapsule ## SOMETIMES_CONSUMES # Populate Image requires reset support.
gEfiMdeModulePkgTokenSpaceGuid.PcdCapsuleInRamSupport ## CONSUMES
[Pcd.X64] [Pcd.X64]
gEfiMdeModulePkgTokenSpaceGuid.PcdCapsulePeiLongModeStackSize ## SOMETIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdCapsulePeiLongModeStackSize ## SOMETIMES_CONSUMES

View File

@ -4,7 +4,7 @@
It installs the Capsule Architectural Protocol defined in PI1.0a to signify It installs the Capsule Architectural Protocol defined in PI1.0a to signify
the capsule runtime services are ready. the capsule runtime services are ready.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent SPDX-License-Identifier: BSD-2-Clause-Patent
**/ **/
@ -71,6 +71,14 @@ UpdateCapsule (
CHAR16 CapsuleVarName[30]; CHAR16 CapsuleVarName[30];
CHAR16 *TempVarName; CHAR16 *TempVarName;
//
// Check if platform support Capsule In RAM or not.
// Platform could choose to drop CapsulePei/CapsuleX64 and do not support Capsule In RAM.
//
if (!PcdGetBool(PcdCapsuleInRamSupport)) {
return EFI_UNSUPPORTED;
}
// //
// Capsule Count can't be less than one. // Capsule Count can't be less than one.
// //
@ -218,6 +226,8 @@ UpdateCapsule (
/** /**
Returns if the capsule can be supported via UpdateCapsule(). Returns if the capsule can be supported via UpdateCapsule().
Notice: When PcdCapsuleInRamSupport is unsupported, even this routine returns a valid answer,
the capsule still is unsupported via UpdateCapsule().
@param CapsuleHeaderArray Virtual pointer to an array of virtual pointers to the capsules @param CapsuleHeaderArray Virtual pointer to an array of virtual pointers to the capsules
being passed into update capsule. being passed into update capsule.