X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FUniversal%2FPCD%2FDxe%2FPcd.c;h=4e6b11a046c8bd5df628592eeea03c60434045e4;hp=115b1ac93837fc3d89abab856c55115a27fe033b;hb=a7c5092fc5cfbb674af264a5e96266698792606c;hpb=2b21a9713ce974c14f26dfb5d3496372e04b501b diff --git a/EdkModulePkg/Universal/PCD/Dxe/Pcd.c b/EdkModulePkg/Universal/PCD/Dxe/Pcd.c index 115b1ac938..4e6b11a046 100644 --- a/EdkModulePkg/Universal/PCD/Dxe/Pcd.c +++ b/EdkModulePkg/Universal/PCD/Dxe/Pcd.c @@ -80,10 +80,6 @@ PcdDxeInit ( BuildPcdDxeDataBase (); - // - // BugBug Check if PcdDatabase is already installed. - // - Status = gBS->InstallProtocolInterface ( &NewHandle, &gPcdProtocolGuid, @@ -200,9 +196,15 @@ DxePcdGetSize ( // TmpTokenNumber = TokenNumber; - ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER); + // EBC compiler is very choosy. It may report warning about comparison + // between UINTN and 0 . So we add 1 in each size of the + // comparison. + ASSERT (TokenNumber + 1 < PCD_TOTAL_TOKEN_NUMBER + 1); - IsPeiDb = (BOOLEAN) (TokenNumber < PEI_LOCAL_TOKEN_NUMBER); + // EBC compiler is very choosy. It may report warning about comparison + // between UINTN and 0 . So we add 1 in each size of the + // comparison. + IsPeiDb = (BOOLEAN) (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1); TokenNumber = IsPeiDb ? TokenNumber : (TokenNumber - PEI_LOCAL_TOKEN_NUMBER); @@ -501,25 +503,32 @@ DxePcdGetNextToken ( { EFI_STATUS Status; + if (!FeaturePcdGet (PcdDxePcdDatabaseTraverseEnabled)) { + return EFI_UNSUPPORTED; + } + Status = EFI_NOT_FOUND; // // Scan the local token space // if (Guid == NULL) { - if (((*TokenNumber > PEI_NEX_TOKEN_NUMBER) && (*TokenNumber < PEI_LOCAL_TOKEN_NUMBER)) || - ((*TokenNumber > (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER)))) { + // EBC compiler is very choosy. It may report warning about comparison + // between UINTN and 0 . So we add 1 in each size of the + // comparison. + if (((*TokenNumber + 1 > PEI_NEX_TOKEN_NUMBER + 1) && (*TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1)) || + ((*TokenNumber + 1 > (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER + 1)))) { return EFI_NOT_FOUND; } (*TokenNumber)++; - if (*TokenNumber > PEI_NEX_TOKEN_NUMBER && - *TokenNumber <= PEI_LOCAL_TOKEN_NUMBER) { + if ((*TokenNumber + 1 > PEI_NEX_TOKEN_NUMBER + 1) && + (*TokenNumber <= PEI_LOCAL_TOKEN_NUMBER)) { // // The first Non-Ex type Token Number for DXE PCD // database is PEI_LOCAL_TOKEN_NUMBER // *TokenNumber = PEI_LOCAL_TOKEN_NUMBER; - } else if (*TokenNumber > DXE_NEX_TOKEN_NUMBER + PEI_LOCAL_TOKEN_NUMBER) { + } else if (*TokenNumber + 1 > DXE_NEX_TOKEN_NUMBER + PEI_LOCAL_TOKEN_NUMBER + 1) { *TokenNumber = PCD_INVALID_TOKEN_NUMBER; } return EFI_SUCCESS; @@ -618,6 +627,10 @@ DxePcdGetNextTokenSpace ( EFI_GUID **DxeTokenSpaceTable; BOOLEAN Match; + if (!FeaturePcdGet (PcdDxePcdDatabaseTraverseEnabled)) { + return EFI_UNSUPPORTED; + } + ASSERT (Guid != NULL); if (PEI_EXMAP_TABLE_EMPTY && DXE_EXMAP_TABLE_EMPTY) {