From 58f1099f3dd6d1d7606cc57046e59488d4cbf023 Mon Sep 17 00:00:00 2001 From: qwang12 Date: Fri, 23 Jun 2006 04:30:23 +0000 Subject: 1) remove some dead code from WinNtBusDriver.c 2) change PCD_INVALID_TOKEN_NUMBER to 0 as stipulated in MWG spec and PCD spec. 3) support returning a Default Value when a read failure by variable service for PCD entry with Variable Enabled. 4) Remove a lot of unreferenced JAVA import from CollectPCDAction.java, PCDAutoGenAction.java, MemoryDatabaseManager.java, Token.java and UsageInstance.java. 5) Opimized to merge elements in all tables in PCD database for make the code compact. 6) Did a tighter check on how dynamic PCD entry is referenced in each module. 7) Update the PCD driver/PEIM and PCD database generation verion to 2. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@605 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkModulePkg/Universal/PCD/Pei/Pcd.c | 38 ++++++++++++++++--------- EdkModulePkg/Universal/PCD/Pei/Service.c | 48 +++++++++++++++++++++++++++----- EdkModulePkg/Universal/PCD/Pei/Service.h | 2 +- 3 files changed, 67 insertions(+), 21 deletions(-) (limited to 'EdkModulePkg/Universal/PCD/Pei') diff --git a/EdkModulePkg/Universal/PCD/Pei/Pcd.c b/EdkModulePkg/Universal/PCD/Pei/Pcd.c index b41d3ed09b..34af220f66 100644 --- a/EdkModulePkg/Universal/PCD/Pei/Pcd.c +++ b/EdkModulePkg/Universal/PCD/Pei/Pcd.c @@ -169,6 +169,13 @@ PeiPcdGetSize ( IN UINTN TokenNumber ) { + // + // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. + // We have to decrement TokenNumber by 1 to make it usable + // as the array index. + // + TokenNumber--; + ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER); return GetPcdDatabase()->Init.SizeTable[TokenNumber]; @@ -559,10 +566,10 @@ PeiPcdGetNextToken ( return EFI_SUCCESS; } -EFI_GUID * +EFI_STATUS EFIAPI PeiPcdGetNextTokenSpaceGuid ( - IN CONST EFI_GUID *Guid + IN OUT CONST EFI_GUID **Guid ) { UINTN GuidTableIdx; @@ -572,9 +579,17 @@ PeiPcdGetNextTokenSpaceGuid ( UINTN i; BOOLEAN Found; - if (PEI_EXMAP_TABLE_EMPTY) { - return NULL; - } + if (*Guid == NULL) { + if (PEI_EXMAP_TABLE_EMPTY) { + return EFI_SUCCESS; + } else { + // + // return the first Token Space Guid. + // + *Guid = &PeiPcdDb->Init.GuidTable[ExMapTable[0].ExGuidIndex]; + return EFI_SUCCESS; + } + } // // Assume PCD Database AutoGen tool is sorting the ExMap based on the following order @@ -583,10 +598,10 @@ PeiPcdGetNextTokenSpaceGuid ( // PeiPcdDb = GetPcdDatabase (); - MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), Guid); + MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), *Guid); if (MatchGuid == NULL) { - return NULL; + return EFI_NOT_FOUND; } GuidTableIdx = MatchGuid - PeiPcdDb->Init.GuidTable; @@ -604,16 +619,13 @@ PeiPcdGetNextTokenSpaceGuid ( if (Found) { for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++ ) { if (ExMapTable[i].ExGuidIndex != GuidTableIdx ) { - if (i < PEI_EXMAPPING_TABLE_SIZE) { - return &PeiPcdDb->Init.GuidTable[ExMapTable[i].ExGuidIndex]; - } else { - return NULL; - } + *Guid = &PeiPcdDb->Init.GuidTable[ExMapTable[i].ExGuidIndex]; + return EFI_SUCCESS; } } } - return NULL; + return EFI_NOT_FOUND; } diff --git a/EdkModulePkg/Universal/PCD/Pei/Service.c b/EdkModulePkg/Universal/PCD/Pei/Service.c index 01fe0151bf..8d03d9c2b1 100644 --- a/EdkModulePkg/Universal/PCD/Pei/Service.c +++ b/EdkModulePkg/Universal/PCD/Pei/Service.c @@ -46,12 +46,27 @@ PeiRegisterCallBackWorker ( if (Guid == NULL) { TokenNumber = ExTokenNumber; + + // + // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. + // We have to decrement TokenNumber by 1 to make it usable + // as the array index. + // + TokenNumber--; ASSERT (TokenNumber < PEI_NEX_TOKEN_NUMBER); } else { TokenNumber = GetExPcdTokenNumber (Guid, ExTokenNumber); + + // + // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. + // We have to decrement TokenNumber by 1 to make it usable + // as the array index. + // + TokenNumber--; ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER); } + LocalTokenNumber = GetPcdDatabase()->Init.LocalTokenNumberTable[TokenNumber]; ASSERT ((LocalTokenNumber & PCD_TYPE_HII) == 0); @@ -248,6 +263,13 @@ InvokeCallbackOnSet ( PCD_PPI_CALLBACK *CallbackTable; UINTN Idx; + // + // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. + // We have to decrement TokenNumber by 1 to make it usable + // as the array index. + // + TokenNumber--; + if (Guid == NULL) ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER); @@ -287,6 +309,13 @@ SetWorker ( UINTN Offset; VOID *InternalData; + // + // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. + // We have to decrement TokenNumber by 1 to make it usable + // as the array index. + // + TokenNumber--; + ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER); PeiPcdDb = GetPcdDatabase (); @@ -305,7 +334,7 @@ SetWorker ( // type PCD entry in ExSetWorker. // if (TokenNumber < PEI_NEX_TOKEN_NUMBER) { - InvokeCallbackOnSet (0, NULL, TokenNumber, Data, Size); + InvokeCallbackOnSet (0, NULL, TokenNumber + 1, Data, Size); } if ((LocalTokenNumber & PCD_TYPE_SKU_ENABLED) == PCD_TYPE_SKU_ENABLED) { @@ -425,9 +454,16 @@ GetWorker ( UINT32 LocalTokenNumber; UINTN Size; + // + // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. + // We have to decrement TokenNumber by 1 to make it usable + // as the array index. + // + TokenNumber--; + ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER); - Size = PeiPcdGetSize(TokenNumber); + Size = PeiPcdGetSize(TokenNumber + 1); ASSERT (GetSize == Size || GetSize == 0); @@ -464,16 +500,14 @@ GetWorker ( return (VOID *) ((UINT8 *) Data + VariableHead->Offset); } else { // - // BugBug: Need to support default value. The current implementation - // will return a memory buffer with ALL ZERO. - // - return AllocateZeroPool (Size); + // Return the default value specified by Platform Integrator + // + return (VOID *) ((UINT8 *) PeiPcdDb + VariableHead->DefaultValueOffset); } } case PCD_TYPE_DATA: return (VOID *) ((UINT8 *)PeiPcdDb + Offset); - break; case PCD_TYPE_STRING: StringTableIdx = (UINT16) *((UINT8 *) PeiPcdDb + Offset); diff --git a/EdkModulePkg/Universal/PCD/Pei/Service.h b/EdkModulePkg/Universal/PCD/Pei/Service.h index e62d0307a7..563e82ae22 100644 --- a/EdkModulePkg/Universal/PCD/Pei/Service.h +++ b/EdkModulePkg/Universal/PCD/Pei/Service.h @@ -22,7 +22,7 @@ Module Name: Service.h // Please make sure the PCD Serivce PEIM Version is consistent with // the version of PCD Database generation tool // -#define PCD_PEI_SERVICE_DRIVER_VERSION 1 +#define PCD_PEI_SERVICE_DRIVER_VERSION 2 // // PCD_PEI_DATABASE_GENTOOL_VERSION is defined in Autogen.h -- cgit v1.2.3