summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MdeModulePkg/Universal/PCD/Dxe/Pcd.c42
-rw-r--r--MdeModulePkg/Universal/PCD/Pei/Pcd.c27
2 files changed, 47 insertions, 22 deletions
diff --git a/MdeModulePkg/Universal/PCD/Dxe/Pcd.c b/MdeModulePkg/Universal/PCD/Dxe/Pcd.c
index 0bb44ff..c8dab14 100644
--- a/MdeModulePkg/Universal/PCD/Dxe/Pcd.c
+++ b/MdeModulePkg/Universal/PCD/Dxe/Pcd.c
@@ -1,6 +1,7 @@
/** @file
PCD DXE driver manage all PCD entry initialized in PEI phase and DXE phase, and
- produce the implementation of PCD protocol.
+ produce the implementation of native PCD protocol and EFI_PCD_PROTOCOL defined in
+ PI 1.2 Vol3.
Copyright (c) 2006 - 2009, Intel Corporation
All rights reserved. This program and the accompanying materials
@@ -27,6 +28,10 @@ EFI_GUID *TmpTokenSpaceBuffer[PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZ
///
EFI_LOCK mPcdDatabaseLock = EFI_INITIALIZE_LOCK_VARIABLE(TPL_NOTIFY);
+//
+// PCD_PROTOCOL the native implementation provided by MdePkg which support dynamic
+// type and dynamicEx type PCD.
+//
PCD_PROTOCOL mPcdInstance = {
DxePcdSetSku,
@@ -66,6 +71,10 @@ PCD_PROTOCOL mPcdInstance = {
DxePcdGetNextTokenSpace
};
+//
+// EFI_PCD_PROTOCOL is defined in PI 1.2 Vol 3 which only support dynamicEx type
+// PCD.
+//
EFI_PCD_PROTOCOL mEfiPcdInstance = {
DxePcdSetSku,
DxePcdGet8Ex,
@@ -87,10 +96,8 @@ EFI_PCD_PROTOCOL mEfiPcdInstance = {
DxePcdGetNextTokenSpace
};
-//
-// Static global to reduce the code size
-//
-EFI_HANDLE mNewHandle = NULL;
+
+
/**
Main entry for PCD DXE driver.
@@ -110,8 +117,9 @@ PcdDxeInit (
IN EFI_SYSTEM_TABLE *SystemTable
)
{
- EFI_STATUS Status;
-
+ EFI_STATUS Status;
+ EFI_HANDLE mNewHandle;
+
//
// Make sure the Pcd Protocol is not already installed in the system
//
@@ -120,26 +128,20 @@ PcdDxeInit (
BuildPcdDxeDataBase ();
- Status = gBS->InstallProtocolInterface (
- &mNewHandle,
- &gPcdProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mPcdInstance
- );
-
+ mNewHandle = NULL;
//
- // Also install gEfiPcdProtocolGuid which is only support dynamic-ex type
- // PCD.
+ // Install PCD_PROTOCOL to handle dynamic type PCD
+ // Install EFI_PCD_PROTOCOL to handle dynamicEx type PCD
//
- mNewHandle = NULL;
- Status = gBS->InstallProtocolInterface (
+ Status = gBS->InstallMultipleProtocolInterfaces (
&mNewHandle,
+ &gPcdProtocolGuid,
+ &mPcdInstance,
&gEfiPcdProtocolGuid,
- EFI_NATIVE_INTERFACE,
&mEfiPcdInstance
);
-
+
ASSERT_EFI_ERROR (Status);
return EFI_SUCCESS;
diff --git a/MdeModulePkg/Universal/PCD/Pei/Pcd.c b/MdeModulePkg/Universal/PCD/Pei/Pcd.c
index 08a18c1..783dd2d 100644
--- a/MdeModulePkg/Universal/PCD/Pei/Pcd.c
+++ b/MdeModulePkg/Universal/PCD/Pei/Pcd.c
@@ -14,6 +14,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include "Service.h"
+//
+// Instance of PCD_PPI protocol is native implementation by MdePkg.
+// This protocol instance support dynamic and dynamicEx type PCDs.
+//
PCD_PPI mPcdPpiInstance = {
PeiPcdSetSku,
@@ -53,6 +57,10 @@ PCD_PPI mPcdPpiInstance = {
PeiPcdGetNextTokenSpace
};
+//
+// Instance of EFI_PEI_PCD_PPI which is defined in PI 1.2 Vol 3.
+// This PPI instance only support dyanmicEx type PCD.
+//
EFI_PEI_PCD_PPI mEfiPcdPpiInstance = {
PeiPcdSetSku,
@@ -90,7 +98,7 @@ EFI_PEI_PPI_DESCRIPTOR mEfiPpiPCD = {
/**
Main entry for PCD PEIM driver.
- This routine initialize the PCD database for PEI phase and install PCD_PPI.
+ This routine initialize the PCD database for PEI phase and install PCD_PPI/EFI_PEI_PCD_PPI.
@param FileHandle Handle of the file being invoked.
@param PeiServices Describes the list of possible PEI Services.
@@ -105,9 +113,24 @@ PcdPeimInit (
IN CONST EFI_PEI_SERVICES **PeiServices
)
{
+ EFI_STATUS Status;
+
BuildPcdDatabase ();
- return PeiServicesInstallPpi (&mPpiPCD);
+ //
+ // Install PCD_PPI which produce support for dynamic and dynamicEx PCD
+ //
+ Status = PeiServicesInstallPpi (&mPpiPCD);
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Install EFI_PCD_PPI which produce support for dynamicEx PCD which is defined
+ // in PI 1.2 Vol 3 specification.
+ //
+ Status = PeiServicesInstallPpi (&mEfiPpiPCD);
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
}
/**