1, Correct the PCD PEIM to produce gEfiPcdPpi and gPcdPpi at same time;

2, Combine two action of InstallProtocolInstance for gEfiPcdProtocol and gPcdProtocol into InstallMultipleProtocolInstances.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9468 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
klu2 2009-11-23 07:52:09 +00:00
parent 7bbae07531
commit 8a541f0a71
2 changed files with 47 additions and 22 deletions

View File

@ -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;

View File

@ -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;
}
/**