X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FUniversal%2FPCD%2FPei%2FPcd.c;h=34af220f6686ded58515fd20fb4aa9c2b33ea5af;hp=b41d3ed09b0a9332ab5338d39a870a5bec761893;hb=58f1099f3dd6d1d7606cc57046e59488d4cbf023;hpb=90f7b6a81b96a112f196ff80e7cade4f951264a1 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; }