X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FUniversal%2FPCD%2FPei%2FPcd.c;h=33bc4e1069edb063fc5745010d4c0fb5078c3654;hp=6d90671852690becb94a2fab62c0fc6071fed955;hb=5f5f28c90dc44075e9f9202b030c66300218f7c0;hpb=c24ba2f612d89d6dd15871cdb8a66080859d9ab3 diff --git a/EdkModulePkg/Universal/PCD/Pei/Pcd.c b/EdkModulePkg/Universal/PCD/Pei/Pcd.c index 6d90671852..33bc4e1069 100644 --- a/EdkModulePkg/Universal/PCD/Pei/Pcd.c +++ b/EdkModulePkg/Universal/PCD/Pei/Pcd.c @@ -101,7 +101,7 @@ PeiPcdSetSku ( UINT8 EFIAPI PeiPcdGet8 ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8))); @@ -112,7 +112,7 @@ PeiPcdGet8 ( UINT16 EFIAPI PeiPcdGet16 ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16))); @@ -123,7 +123,7 @@ PeiPcdGet16 ( UINT32 EFIAPI PeiPcdGet32 ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32))); @@ -134,7 +134,7 @@ PeiPcdGet32 ( UINT64 EFIAPI PeiPcdGet64 ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { return ReadUnaligned64 (GetWorker (TokenNumber, sizeof (UINT64))); @@ -145,7 +145,7 @@ PeiPcdGet64 ( VOID * EFIAPI PeiPcdGetPtr ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { return GetWorker (TokenNumber, 0); @@ -156,7 +156,7 @@ PeiPcdGetPtr ( BOOLEAN EFIAPI PeiPcdGetBool ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN))); @@ -167,13 +167,22 @@ PeiPcdGetBool ( UINTN EFIAPI PeiPcdGetSize ( - IN UINTN TokenNumber + IN UINTN TokenNumber ) { PEI_PCD_DATABASE *PeiPcdDb; UINTN Size; UINTN MaxSize; + // + // If DebugAssertEnabled is TRUE, we still need to provide the GET size + // function as GetWorker and SetWoker need this function to do ASSERT. + // + if ((!FeaturePcdGet(PcdPeiPcdDatabaseGetSizeEnabled)) && + (!DebugAssertEnabled ())) { + return 0; + } + PeiPcdDb = GetPcdDatabase (); // // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER. @@ -182,7 +191,10 @@ PeiPcdGetSize ( // TokenNumber--; - ASSERT (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. + ASSERT (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1); Size = (PeiPcdDb->Init.LocalTokenNumberTable[TokenNumber] & PCD_DATUM_TYPE_ALL_SET) >> PCD_DATUM_TYPE_SHIFT; @@ -202,8 +214,8 @@ PeiPcdGetSize ( UINT8 EFIAPI PeiPcdGet8Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof (UINT8))); @@ -214,8 +226,8 @@ PeiPcdGet8Ex ( UINT16 EFIAPI PeiPcdGet16Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT16))); @@ -226,8 +238,8 @@ PeiPcdGet16Ex ( UINT32 EFIAPI PeiPcdGet32Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT32))); @@ -238,8 +250,8 @@ PeiPcdGet32Ex ( UINT64 EFIAPI PeiPcdGet64Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT64))); @@ -250,8 +262,8 @@ PeiPcdGet64Ex ( VOID * EFIAPI PeiPcdGetPtrEx ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { return ExGetWorker (Guid, ExTokenNumber, 0); @@ -262,8 +274,8 @@ PeiPcdGetPtrEx ( BOOLEAN EFIAPI PeiPcdGetBoolEx ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof (BOOLEAN))); @@ -274,10 +286,14 @@ PeiPcdGetBoolEx ( UINTN EFIAPI PeiPcdGetSizeEx ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber ) { + if ((!FeaturePcdGet (PcdPeiPcdDatabaseGetSizeEnabled)) || !FeaturePcdGet (PcdPeiPcdDatabaseExEnabled)) { + return 0; + } + return PeiPcdGetSize (GetExPcdTokenNumber (Guid, ExTokenNumber)); } @@ -298,8 +314,8 @@ PeiPcdSet8 ( EFI_STATUS EFIAPI PeiPcdSet16 ( - IN UINTN TokenNumber, - IN UINT16 Value + IN UINTN TokenNumber, + IN UINT16 Value ) { return SetValueWorker (TokenNumber, &Value, sizeof (Value)); @@ -310,8 +326,8 @@ PeiPcdSet16 ( EFI_STATUS EFIAPI PeiPcdSet32 ( - IN UINTN TokenNumber, - IN UINT32 Value + IN UINTN TokenNumber, + IN UINT32 Value ) { return SetValueWorker (TokenNumber, &Value, sizeof (Value)); @@ -322,8 +338,8 @@ PeiPcdSet32 ( EFI_STATUS EFIAPI PeiPcdSet64 ( - IN UINTN TokenNumber, - IN UINT64 Value + IN UINTN TokenNumber, + IN UINT64 Value ) { return SetValueWorker (TokenNumber, &Value, sizeof (Value)); @@ -333,9 +349,9 @@ PeiPcdSet64 ( EFI_STATUS EFIAPI PeiPcdSetPtr ( - IN UINTN TokenNumber, - IN OUT UINTN *SizeOfBuffer, - IN VOID *Buffer + IN UINTN TokenNumber, + IN OUT UINTN *SizeOfBuffer, + IN VOID *Buffer ) { return SetWorker (TokenNumber, Buffer, SizeOfBuffer, TRUE); @@ -346,8 +362,8 @@ PeiPcdSetPtr ( EFI_STATUS EFIAPI PeiPcdSetBool ( - IN UINTN TokenNumber, - IN BOOLEAN Value + IN UINTN TokenNumber, + IN BOOLEAN Value ) { return SetValueWorker (TokenNumber, &Value, sizeof (Value)); @@ -358,9 +374,9 @@ PeiPcdSetBool ( EFI_STATUS EFIAPI PeiPcdSet8Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber, - IN UINT8 Value + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber, + IN UINT8 Value ) { return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); @@ -371,9 +387,9 @@ PeiPcdSet8Ex ( EFI_STATUS EFIAPI PeiPcdSet16Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber, - IN UINT16 Value + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber, + IN UINT16 Value ) { return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); @@ -384,9 +400,9 @@ PeiPcdSet16Ex ( EFI_STATUS EFIAPI PeiPcdSet32Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber, - IN UINT32 Value + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber, + IN UINT32 Value ) { return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); @@ -397,9 +413,9 @@ PeiPcdSet32Ex ( EFI_STATUS EFIAPI PeiPcdSet64Ex ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber, - IN UINT64 Value + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber, + IN UINT64 Value ) { return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); @@ -410,10 +426,10 @@ PeiPcdSet64Ex ( EFI_STATUS EFIAPI PeiPcdSetPtrEx ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber, - IN UINTN *SizeOfBuffer, - IN VOID *Value + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber, + IN UINTN *SizeOfBuffer, + IN VOID *Value ) { return ExSetWorker (ExTokenNumber, Guid, Value, SizeOfBuffer, TRUE); @@ -424,9 +440,9 @@ PeiPcdSetPtrEx ( EFI_STATUS EFIAPI PeiPcdSetBoolEx ( - IN CONST EFI_GUID *Guid, - IN UINTN ExTokenNumber, - IN BOOLEAN Value + IN CONST EFI_GUID *Guid, + IN UINTN ExTokenNumber, + IN BOOLEAN Value ) { return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); @@ -438,11 +454,15 @@ PeiPcdSetBoolEx ( EFI_STATUS EFIAPI PeiRegisterCallBackOnSet ( - IN UINTN ExTokenNumber, IN CONST EFI_GUID *Guid, OPTIONAL + IN UINTN ExTokenNumber, IN PCD_PPI_CALLBACK CallBackFunction ) { + if (!FeaturePcdGet(PcdPeiPcdDatabaseCallbackOnSetEnabled)) { + return EFI_UNSUPPORTED; + } + ASSERT (CallBackFunction != NULL); return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, TRUE); @@ -453,11 +473,15 @@ PeiRegisterCallBackOnSet ( EFI_STATUS EFIAPI PcdUnRegisterCallBackOnSet ( - IN UINTN ExTokenNumber, IN CONST EFI_GUID *Guid, OPTIONAL + IN UINTN ExTokenNumber, IN PCD_PPI_CALLBACK CallBackFunction ) { + if (!FeaturePcdGet(PcdPeiPcdDatabaseCallbackOnSetEnabled)) { + return EFI_UNSUPPORTED; + } + ASSERT (CallBackFunction != NULL); return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, FALSE); @@ -479,7 +503,14 @@ PeiPcdGetNextToken ( UINTN i; BOOLEAN Found; + if (!FeaturePcdGet (PcdPeiPcdDatabaseTraverseEnabled)) { + return EFI_UNSUPPORTED; + } + if (Guid == NULL) { + if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) { + return EFI_NOT_FOUND; + } (*TokenNumber)++; if (*TokenNumber > PEI_NEX_TOKEN_NUMBER) { *TokenNumber = PCD_INVALID_TOKEN_NUMBER; @@ -557,7 +588,7 @@ PeiPcdGetNextToken ( EFI_STATUS EFIAPI PeiPcdGetNextTokenSpace ( - IN OUT CONST EFI_GUID **Guid + IN OUT CONST EFI_GUID **Guid ) { UINTN GuidTableIdx; @@ -567,6 +598,10 @@ PeiPcdGetNextTokenSpace ( UINTN i; BOOLEAN Found; + if (!FeaturePcdGet (PcdPeiPcdDatabaseTraverseEnabled)) { + return EFI_UNSUPPORTED; + } + ASSERT (Guid != NULL); if (PEI_EXMAP_TABLE_EMPTY) {