From fc547e0863b5833fa0b56794953a85dd1c1b5ee5 Mon Sep 17 00:00:00 2001 From: klu2 Date: Mon, 14 Jul 2008 07:17:04 +0000 Subject: [PATCH] Code scrub for PCD PEIM. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5461 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Universal/PCD/Pei/Pcd.c | 545 ++++++++++++++++++-- MdeModulePkg/Universal/PCD/Pei/Service.c | 186 +++++-- MdeModulePkg/Universal/PCD/Pei/Service.h | 614 ++++++++++++++++++++++- 3 files changed, 1240 insertions(+), 105 deletions(-) diff --git a/MdeModulePkg/Universal/PCD/Pei/Pcd.c b/MdeModulePkg/Universal/PCD/Pei/Pcd.c index daaba4b539..28088afc5b 100644 --- a/MdeModulePkg/Universal/PCD/Pei/Pcd.c +++ b/MdeModulePkg/Universal/PCD/Pei/Pcd.c @@ -1,5 +1,7 @@ -/** @file PCD PEIM - +/** @file + PCD PEIM manage PCD database to manage all dynamic PCD in PEI phase. PCD PEIM + also produce PCD_PPI. + Copyright (c) 2006, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -9,14 +11,10 @@ http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: Pcd.c - **/ #include "Service.h" - PCD_PPI mPcdPpiInstance = { PeiPcdSetSku, @@ -56,16 +54,23 @@ PCD_PPI mPcdPpiInstance = { PeiPcdGetNextTokenSpace }; - - STATIC EFI_PEI_PPI_DESCRIPTOR mPpiPCD = { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), &gPcdPpiGuid, &mPcdPpiInstance }; +/** + Main entry for PCD PEIM driver. + + This routine initialize the PCD database for PEI phase and install PCD_PPI. + @param FfsHeader Pointer to PEIM FFS header image + @param PeiServices Pointer to EFI_PEI_SERVICES + @return Status of install PCD_PPI + +**/ EFI_STATUS EFIAPI PcdPeimInit ( @@ -73,17 +78,34 @@ PcdPeimInit ( IN EFI_PEI_SERVICES **PeiServices ) { - EFI_STATUS Status; - BuildPcdDatabase (); - - Status = PeiServicesInstallPpi (&mPpiPCD); - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; + return PeiServicesInstallPpi (&mPpiPCD); } +/** + Sets the SKU value for subsequent calls to set or get PCD token values. + + SetSku() sets the SKU Id to be used for subsequent calls to set or get PCD values. + SetSku() is normally called only once by the system. + + For each item (token), the database can hold a single value that applies to all SKUs, + or multiple values, where each value is associated with a specific SKU Id. Items with multiple, + SKU-specific values are called SKU enabled. + + The SKU Id of zero is reserved as a default. The valid SkuId range is 1 to 255. + For tokens that are not SKU enabled, the system ignores any set SKU Id and works with the + single value for that token. For SKU-enabled tokens, the system will use the SKU Id set by the + last call to SetSku(). If no SKU Id is set or the currently set SKU Id isn't valid for the specified token, + the system uses the default SKU Id. If the system attempts to use the default SKU Id and no value has been + set for that Id, the results are unpredictable. + + @param[in] SkuId The SKU value that will be used when the PCD service will retrieve and + set values associated with a PCD token. + + @retval VOID + +**/ VOID EFIAPI PeiPcdSetSku ( @@ -96,8 +118,17 @@ PeiPcdSetSku ( return; } +/** + Retrieves an 8-bit value for a given PCD token. + Retrieves the current byte-sized value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT8 value. + +**/ UINT8 EFIAPI PeiPcdGet8 ( @@ -107,8 +138,17 @@ PeiPcdGet8 ( return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8))); } +/** + Retrieves an 16-bit value for a given PCD token. + Retrieves the current 16-bits value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT16 value. + +**/ UINT16 EFIAPI PeiPcdGet16 ( @@ -118,8 +158,17 @@ PeiPcdGet16 ( return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16))); } +/** + Retrieves an 32-bit value for a given PCD token. + Retrieves the current 32-bits value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT32 value. + +**/ UINT32 EFIAPI PeiPcdGet32 ( @@ -129,8 +178,17 @@ PeiPcdGet32 ( return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32))); } +/** + Retrieves an 64-bit value for a given PCD token. + Retrieves the current 64-bits value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT64 value. + +**/ UINT64 EFIAPI PeiPcdGet64 ( @@ -140,8 +198,19 @@ PeiPcdGet64 ( return ReadUnaligned64 (GetWorker (TokenNumber, sizeof (UINT64))); } +/** + Retrieves a pointer to a value for a given PCD token. + + Retrieves the current pointer to the buffer for a PCD token number. + Do not make any assumptions about the alignment of the pointer that + is returned by this function call. If the TokenNumber is invalid, + the results are unpredictable. + @param[in] TokenNumber The PCD token number. + @return The pointer to the buffer to be retrived. + +**/ VOID * EFIAPI PeiPcdGetPtr ( @@ -151,8 +220,19 @@ PeiPcdGetPtr ( return GetWorker (TokenNumber, 0); } +/** + Retrieves a Boolean value for a given PCD token. + Retrieves the current boolean value for a PCD token number. + Do not make any assumptions about the alignment of the pointer that + is returned by this function call. If the TokenNumber is invalid, + the results are unpredictable. + @param[in] TokenNumber The PCD token number. + + @return The Boolean value. + +**/ BOOLEAN EFIAPI PeiPcdGetBool ( @@ -162,8 +242,17 @@ PeiPcdGetBool ( return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN))); } +/** + Retrieves the size of the value for a given PCD token. + + Retrieves the current size of a particular PCD token. + If the TokenNumber is invalid, the results are unpredictable. + @param[in] TokenNumber The PCD token number. + @return The size of the value for the PCD token. + +**/ UINTN EFIAPI PeiPcdGetSize ( @@ -209,8 +298,20 @@ PeiPcdGetSize ( } +/** + Retrieves an 8-bit value for a given PCD token. + Retrieves the 8-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + + @return The size 8-bit value for the PCD token. + +**/ UINT8 EFIAPI PeiPcdGet8Ex ( @@ -221,8 +322,20 @@ PeiPcdGet8Ex ( return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof (UINT8))); } +/** + Retrieves an 16-bit value for a given PCD token. + Retrieves the 16-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + + @return The size 16-bit value for the PCD token. + +**/ UINT16 EFIAPI PeiPcdGet16Ex ( @@ -233,8 +346,20 @@ PeiPcdGet16Ex ( return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT16))); } +/** + Retrieves an 32-bit value for a given PCD token. + + Retrieves the 32-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + @return The size 32-bit value for the PCD token. + +**/ UINT32 EFIAPI PeiPcdGet32Ex ( @@ -245,8 +370,20 @@ PeiPcdGet32Ex ( return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT32))); } +/** + Retrieves an 64-bit value for a given PCD token. + + Retrieves the 64-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + @return The size 64-bit value for the PCD token. + +**/ UINT64 EFIAPI PeiPcdGet64Ex ( @@ -257,8 +394,20 @@ PeiPcdGet64Ex ( return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT64))); } +/** + Retrieves a pointer to a value for a given PCD token. + Retrieves the current pointer to the buffer for a PCD token number. + Do not make any assumptions about the alignment of the pointer that + is returned by this function call. If the TokenNumber is invalid, + the results are unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + + @return The pointer to the buffer to be retrived. + +**/ VOID * EFIAPI PeiPcdGetPtrEx ( @@ -269,8 +418,20 @@ PeiPcdGetPtrEx ( return ExGetWorker (Guid, ExTokenNumber, 0); } +/** + Retrieves an Boolean value for a given PCD token. + + Retrieves the Boolean value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + @return The size Boolean value for the PCD token. + +**/ BOOLEAN EFIAPI PeiPcdGetBoolEx ( @@ -281,8 +442,18 @@ PeiPcdGetBoolEx ( return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof (BOOLEAN))); } +/** + Retrieves the size of the value for a given PCD token. + + Retrieves the current size of a particular PCD token. + If the TokenNumber is invalid, the results are unpredictable. + @param[in] Guid The token space for the token number. + @param[in] ExTokenNumber The PCD token number. + @return The size of the value for the PCD token. + +**/ UINTN EFIAPI PeiPcdGetSizeEx ( @@ -297,8 +468,23 @@ PeiPcdGetSizeEx ( return PeiPcdGetSize (GetExPcdTokenNumber (Guid, ExTokenNumber)); } +/** + Sets an 8-bit value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet8 ( @@ -309,8 +495,23 @@ PeiPcdSet8 ( return SetValueWorker (TokenNumber, &Value, sizeof (Value)); } +/** + Sets an 16-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet16 ( @@ -321,8 +522,23 @@ PeiPcdSet16 ( return SetValueWorker (TokenNumber, &Value, sizeof (Value)); } +/** + Sets an 32-bit value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet32 ( @@ -333,8 +549,23 @@ PeiPcdSet32 ( return SetValueWorker (TokenNumber, &Value, sizeof (Value)); } +/** + Sets an 64-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet64 ( @@ -345,7 +576,27 @@ PeiPcdSet64 ( return SetValueWorker (TokenNumber, &Value, sizeof (Value)); } - +/** + Sets a value of a specified size for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] TokenNumber The PCD token number. + @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token. + On input, if the SizeOfValue is greater than the maximum size supported + for this TokenNumber then the output value of SizeOfValue will reflect + the maximum size supported for this TokenNumber. + @param[in] Buffer The buffer to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetPtr ( @@ -357,8 +608,23 @@ PeiPcdSetPtr ( return SetWorker (TokenNumber, Buffer, SizeOfBuffer, TRUE); } +/** + Sets an Boolean value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetBool ( @@ -369,8 +635,24 @@ PeiPcdSetBool ( return SetValueWorker (TokenNumber, &Value, sizeof (Value)); } +/** + Sets an 8-bit value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet8Ex ( @@ -382,8 +664,24 @@ PeiPcdSet8Ex ( return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); } +/** + Sets an 16-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet16Ex ( @@ -395,8 +693,24 @@ PeiPcdSet16Ex ( return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); } +/** + Sets an 32-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet32Ex ( @@ -408,8 +722,24 @@ PeiPcdSet32Ex ( return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); } +/** + Sets an 64-bit value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet64Ex ( @@ -421,22 +751,58 @@ PeiPcdSet64Ex ( return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); } - - +/** + Sets a value of a specified size for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token. + On input, if the SizeOfValue is greater than the maximum size supported + for this TokenNumber then the output value of SizeOfValue will reflect + the maximum size supported for this TokenNumber. + @param[in] Value The buffer to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ 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 OUT UINTN *SizeOfBuffer, + IN VOID *Value ) { return ExSetWorker (ExTokenNumber, Guid, Value, SizeOfBuffer, TRUE); } +/** + Sets an Boolean value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param [in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param [in] ExTokenNumber The PCD token number. + @param [in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetBoolEx ( @@ -448,9 +814,18 @@ PeiPcdSetBoolEx ( return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value)); } +/** + Specifies a function to be called anytime the value of a designated token is changed. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set. + @retval EFI_SUCCESS The PCD service has successfully established a call event + for the CallBackToken requested. + @retval EFI_NOT_FOUND The PCD service could not find the referenced token number. +**/ EFI_STATUS EFIAPI PeiRegisterCallBackOnSet ( @@ -468,8 +843,18 @@ PeiRegisterCallBackOnSet ( return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, TRUE); } +/** + Cancels a previously set callback function for a particular PCD token number. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] ExTokenNumber The PCD token number. + @param[in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set. + @retval EFI_SUCCESS The PCD service has successfully established a call event + for the CallBackToken requested. + @retval EFI_NOT_FOUND The PCD service could not find the referenced token number. + +**/ EFI_STATUS EFIAPI PcdUnRegisterCallBackOnSet ( @@ -487,8 +872,24 @@ PcdUnRegisterCallBackOnSet ( return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, FALSE); } +/** + Retrieves the next valid PCD token for a given namespace. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in, out] TokenNumber A pointer to the PCD token number to use to find the subsequent token number. + If the input token namespace or token number does not exist on the platform, + an error is returned and the value of *TokenNumber is undefined. To retrieve the "first" token, + have the pointer reference a TokenNumber value of 0. If the input token number is 0 and + there is no valid token number for this token namespace, *TokenNumber will be assigned to + 0 and the function return EFI_SUCCESS. If the token number is the last valid token number, + *TokenNumber will be assigned to 0 and the function return EFI_SUCCESS. + @retval EFI_SUCCESS The PCD service retrieved the next valid token number. Or the input token number + is already the last valid token number in the PCD database. + In the later case, *TokenNumber is updated with the value of 0. + @retval EFI_NOT_FOUND If this input token number and token namespace does not exist on the platform. + +**/ EFI_STATUS EFIAPI PeiPcdGetNextToken ( @@ -500,7 +901,7 @@ PeiPcdGetNextToken ( PEI_PCD_DATABASE *PeiPcdDb; EFI_GUID *MatchGuid; DYNAMICEX_MAPPING *ExMapTable; - UINTN i; + UINTN Index; BOOLEAN Found; BOOLEAN PeiExMapTableEmpty; @@ -547,8 +948,8 @@ PeiPcdGetNextToken ( // // Locate the GUID in ExMapTable first. // - for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) { - if (ExMapTable[i].ExGuidIndex == GuidTableIdx) { + for (Index = 0; Index < PEI_EXMAPPING_TABLE_SIZE; Index++) { + if (ExMapTable[Index].ExGuidIndex == GuidTableIdx) { Found = TRUE; break; } @@ -556,22 +957,22 @@ PeiPcdGetNextToken ( if (Found) { if (*TokenNumber == PCD_INVALID_TOKEN_NUMBER) { - *TokenNumber = ExMapTable[i].ExTokenNumber; + *TokenNumber = ExMapTable[Index].ExTokenNumber; return EFI_SUCCESS; } - for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++) { - if (ExMapTable[i].ExTokenNumber == *TokenNumber) { - i++; - if (i == PEI_EXMAPPING_TABLE_SIZE) { + for ( ; Index < PEI_EXMAPPING_TABLE_SIZE; Index++) { + if (ExMapTable[Index].ExTokenNumber == *TokenNumber) { + Index++; + if (Index == PEI_EXMAPPING_TABLE_SIZE) { // // Exceed the length of ExMap Table // *TokenNumber = PCD_INVALID_TOKEN_NUMBER; return EFI_SUCCESS; } - if (ExMapTable[i].ExGuidIndex == GuidTableIdx) { - *TokenNumber = ExMapTable[i].ExTokenNumber; + if (ExMapTable[Index].ExGuidIndex == GuidTableIdx) { + *TokenNumber = ExMapTable[Index].ExTokenNumber; return EFI_SUCCESS; } else { *TokenNumber = PCD_INVALID_TOKEN_NUMBER; @@ -586,8 +987,27 @@ PeiPcdGetNextToken ( return EFI_NOT_FOUND; } +/** + Retrieves the next valid PCD token namespace for a given namespace. + + @param[in, out] Guid An indirect pointer to EFI_GUID. On input it designates + a known token namespace from which the search will start. On output, + it designates the next valid token namespace on the platform. If the input + token namespace does not exist on the platform, an error is returned and + the value of *Guid is undefined. If *Guid is NULL, then the GUID of the + first token space of the current platform is assigned to *Guid the function + return EFI_SUCCESS. If *Guid is NULL and there is no namespace exist in + the platform other than the default (NULL) tokennamespace, *Guid is unchanged + and the function return EFI_SUCCESS. If this input token namespace is the last + namespace on the platform, *Guid will be assigned to NULL and the function return + EFI_SUCCESS. + + @retval EFI_SUCCESS The PCD service retrieved the next valid token space Guid. + Or the input token space Guid is already the last valid token space Guid + in the PCD database. In the later case, *Guid is updated with the value of NULL. + @retval EFI_NOT_FOUND If the input token namespace does not exist on the platform. - +**/ EFI_STATUS EFIAPI PeiPcdGetNextTokenSpace ( @@ -598,7 +1018,7 @@ PeiPcdGetNextTokenSpace ( EFI_GUID *MatchGuid; PEI_PCD_DATABASE *PeiPcdDb; DYNAMICEX_MAPPING *ExMapTable; - UINTN i; + UINTN Index; BOOLEAN Found; BOOLEAN PeiExMapTableEmpty; @@ -644,18 +1064,18 @@ PeiPcdGetNextTokenSpace ( GuidTableIdx = MatchGuid - PeiPcdDb->Init.GuidTable; Found = FALSE; - for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) { - if (ExMapTable[i].ExGuidIndex == GuidTableIdx) { + for (Index = 0; Index < PEI_EXMAPPING_TABLE_SIZE; Index++) { + if (ExMapTable[Index].ExGuidIndex == GuidTableIdx) { Found = TRUE; break; } } if (Found) { - i++; - for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++ ) { - if (ExMapTable[i].ExGuidIndex != GuidTableIdx ) { - *Guid = &PeiPcdDb->Init.GuidTable[ExMapTable[i].ExGuidIndex]; + Index++; + for ( ; Index < PEI_EXMAPPING_TABLE_SIZE; Index++ ) { + if (ExMapTable[Index].ExGuidIndex != GuidTableIdx ) { + *Guid = &PeiPcdDb->Init.GuidTable[ExMapTable[Index].ExGuidIndex]; return EFI_SUCCESS; } } @@ -667,6 +1087,19 @@ PeiPcdGetNextTokenSpace ( } +/** + Get PCD value's size for POINTER type PCD. + + The POINTER type PCD's value will be stored into a buffer in specificed size. + The max size of this PCD's value is described in PCD's definition in DEC file. + + @param LocalTokenNumberTableIdx Index of PCD token number in PCD token table + @param MaxSize Maxmium size of PCD's value + @param Database Pcd database in PEI phase. + + @return PCD value's size for POINTER type PCD. + +**/ UINTN GetPtrTypeSize ( IN UINTN LocalTokenNumberTableIdx, @@ -678,7 +1111,7 @@ GetPtrTypeSize ( UINTN LocalTokenNumber; SKU_ID *SkuIdTable; SIZE_INFO *SizeTable; - UINTN i; + UINTN Index; SizeTableIdx = GetSizeTableIndex (LocalTokenNumberTableIdx, Database); @@ -693,7 +1126,7 @@ GetPtrTypeSize ( // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type // PCD entry. // - if (LocalTokenNumber & PCD_TYPE_VPD) { + if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) { // // We have only one entry for VPD enabled PCD entry: // 1) MAX Size. @@ -715,9 +1148,9 @@ GetPtrTypeSize ( // 2) Current Size for each SKU_ID (It is equal to MaxSku). // SkuIdTable = GetSkuIdArray (LocalTokenNumberTableIdx, Database); - for (i = 0; i < SkuIdTable[0]; i++) { - if (SkuIdTable[1 + i] == Database->Init.SystemSkuId) { - return SizeTable[SizeTableIdx + 1 + i]; + for (Index = 0; Index < SkuIdTable[0]; Index++) { + if (SkuIdTable[1 + Index] == Database->Init.SystemSkuId) { + return SizeTable[SizeTableIdx + 1 + Index]; } } return SizeTable[SizeTableIdx + 1]; @@ -725,8 +1158,20 @@ GetPtrTypeSize ( } } +/** + Set PCD value's size for POINTER type PCD. + + The POINTER type PCD's value will be stored into a buffer in specificed size. + The max size of this PCD's value is described in PCD's definition in DEC file. + + @param LocalTokenNumberTableIdx Index of PCD token number in PCD token table + @param CurrentSize Maxmium size of PCD's value + @param Database Pcd database in PEI phase. + @retval TRUE Success to set PCD's value size, which is not exceed maxmium size + @retval FALSE Fail to set PCD's value size, which maybe exceed maxmium size +**/ BOOLEAN SetPtrTypeSize ( IN UINTN LocalTokenNumberTableIdx, @@ -738,7 +1183,7 @@ SetPtrTypeSize ( UINTN LocalTokenNumber; SKU_ID *SkuIdTable; SIZE_INFO *SizeTable; - UINTN i; + UINTN Index; UINTN MaxSize; SizeTableIdx = GetSizeTableIndex (LocalTokenNumberTableIdx, Database); @@ -754,7 +1199,7 @@ SetPtrTypeSize ( // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type // PCD entry. // - if (LocalTokenNumber & PCD_TYPE_VPD) { + if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) { // // We shouldn't come here as we don't support SET for VPD // @@ -782,9 +1227,9 @@ SetPtrTypeSize ( // 2) Current Size for each SKU_ID (It is equal to MaxSku). // SkuIdTable = GetSkuIdArray (LocalTokenNumberTableIdx, Database); - for (i = 0; i < SkuIdTable[0]; i++) { - if (SkuIdTable[1 + i] == Database->Init.SystemSkuId) { - SizeTable[SizeTableIdx + 1 + i] = (SIZE_INFO) *CurrentSize; + for (Index = 0; Index < SkuIdTable[0]; Index++) { + if (SkuIdTable[1 + Index] == Database->Init.SystemSkuId) { + SizeTable[SizeTableIdx + 1 + Index] = (SIZE_INFO) *CurrentSize; return TRUE; } } diff --git a/MdeModulePkg/Universal/PCD/Pei/Service.c b/MdeModulePkg/Universal/PCD/Pei/Service.c index 16a5cc8489..fddab6be58 100644 --- a/MdeModulePkg/Universal/PCD/Pei/Service.c +++ b/MdeModulePkg/Universal/PCD/Pei/Service.c @@ -21,7 +21,7 @@ Module Name: Service.c The function registers the CallBackOnSet fucntion according to TokenNumber and EFI_GUID space. - @param TokenNumber The token number. + @param ExTokenNumber The token number. @param Guid The GUID space. @param CallBackFunction The Callback function to be registered. @param Register To register or unregister the callback function. @@ -30,7 +30,7 @@ Module Name: Service.c @retval EFI_NOT_FOUND If the PCD Entry is not found according to Token Number and GUID space. @retval EFI_OUT_OF_RESOURCES If the callback function can't be registered because there is not free slot left in the CallbackFnTable. ---*/ +**/ EFI_STATUS PeiRegisterCallBackWorker ( IN UINTN ExTokenNumber, @@ -103,16 +103,9 @@ PeiRegisterCallBackWorker ( } - - - /** The function builds the PCD database. - - @param VOID - - @retval VOID ---*/ +**/ VOID BuildPcdDatabase ( VOID @@ -137,12 +130,8 @@ BuildPcdDatabase ( CallbackFnTable = BuildGuidHob (&gPcdPeiCallbackFnTableHobGuid, SizeOfCallbackFnTable); ZeroMem (CallbackFnTable, SizeOfCallbackFnTable); - - return; } - - /** The function is provided by PCD PEIM and PCD DXE driver to do the work of reading a HII variable from variable service. @@ -154,8 +143,7 @@ BuildPcdDatabase ( @retval EFI_SUCCESS Operation successful. @retval EFI_NOT_FOUND Variablel not found. ---*/ -STATIC +**/ EFI_STATUS GetHiiVariable ( IN CONST EFI_GUID *VariableGuid, @@ -201,13 +189,20 @@ GetHiiVariable ( *VariableData = Buffer; return EFI_SUCCESS; - } else { - return EFI_NOT_FOUND; - } + } + return EFI_NOT_FOUND; } -STATIC +/** + Find the local token number according to system SKU ID. + + @param LocalTokenNumber PCD token number + @param Size The size of PCD entry. + + @return Token number according to system SKU ID. + +**/ UINT32 GetSkuEnabledTokenNumber ( UINT32 LocalTokenNumber, @@ -217,7 +212,7 @@ GetSkuEnabledTokenNumber ( PEI_PCD_DATABASE *PeiPcdDb; SKU_HEAD *SkuHead; SKU_ID *SkuIdTable; - INTN i; + INTN Index; UINT8 *Value; PeiPcdDb = GetPcdDatabase (); @@ -228,27 +223,27 @@ GetSkuEnabledTokenNumber ( Value = (UINT8 *) ((UINT8 *)PeiPcdDb + (SkuHead->SkuDataStartOffset)); SkuIdTable = (SKU_ID *) ((UINT8 *)PeiPcdDb + (SkuHead->SkuIdTableOffset)); - for (i = 0; i < SkuIdTable[0]; i++) { - if (PeiPcdDb->Init.SystemSkuId == SkuIdTable[i + 1]) { + for (Index = 0; Index < SkuIdTable[0]; Index++) { + if (PeiPcdDb->Init.SystemSkuId == SkuIdTable[Index + 1]) { break; } } switch (LocalTokenNumber & PCD_TYPE_ALL_SET) { case PCD_TYPE_VPD: - Value = (UINT8 *) &(((VPD_HEAD *) Value)[i]); + Value = (UINT8 *) &(((VPD_HEAD *) Value)[Index]); return (UINT32) ((Value - (UINT8 *) PeiPcdDb) | PCD_TYPE_VPD); case PCD_TYPE_HII: - Value = (UINT8 *) &(((VARIABLE_HEAD *) Value)[i]); + Value = (UINT8 *) &(((VARIABLE_HEAD *) Value)[Index]); return (UINT32) ((Value - (UINT8 *) PeiPcdDb) | PCD_TYPE_HII); case PCD_TYPE_STRING: - Value = (UINT8 *) &(((STRING_HEAD *) Value)[i]); + Value = (UINT8 *) &(((STRING_HEAD *) Value)[Index]); return (UINT32) ((Value - (UINT8 *) PeiPcdDb) | PCD_TYPE_STRING); case PCD_TYPE_DATA: - Value += Size * i; + Value += Size * Index; return (UINT32) (Value - (UINT8 *) PeiPcdDb); default: @@ -258,12 +253,21 @@ GetSkuEnabledTokenNumber ( ASSERT (FALSE); return 0; - } +/** + Invoke the callback function when dynamic PCD entry was set, if this PCD entry + has registered callback function. + @param ExTokenNumber DynamicEx PCD's token number, if this PCD entry is dyanmicEx + type PCD. + @param Guid DynamicEx PCD's guid, if this PCD entry is dynamicEx type + PCD. + @param TokenNumber PCD token number generated by build tools. + @param Data Value want to be set for this PCD entry + @param Size The size of value -STATIC +**/ VOID InvokeCallbackOnSet ( UINTN ExTokenNumber, @@ -307,11 +311,18 @@ InvokeCallbackOnSet ( ); } } - } +/** + Wrapper function for setting non-pointer type value for a PCD entry. + + @param TokenNumber Pcd token number autogenerated by build tools. + @param Data Value want to be set for PCD entry + @param Size Size of value. + @return status of SetWorker. +**/ EFI_STATUS SetValueWorker ( IN UINTN TokenNumber, @@ -322,12 +333,25 @@ SetValueWorker ( return SetWorker (TokenNumber, Data, &Size, FALSE); } - - +/** + Set value for an PCD entry + + @param TokenNumber Pcd token number autogenerated by build tools. + @param Data Value want to be set for PCD entry + @param Size Size of value. + @param PtrType If TRUE, the type of PCD entry's value is Pointer. + If False, the type of PCD entry's value is not Pointer. + + @retval EFI_INVALID_PARAMETER If this PCD type is VPD, VPD PCD can not be set. + @retval EFI_INVALID_PARAMETER If Size can not be set to size table. + @retval EFI_NOT_FOUND If value type of PCD entry is intergrate, but not in + range of UINT8, UINT16, UINT32, UINT64 + @retval EFI_NOT_FOUND Can not find the PCD type according to token number. +**/ EFI_STATUS SetWorker ( IN UINTN TokenNumber, - IN OUT VOID *Data, + IN VOID *Data, IN OUT UINTN *Size, IN BOOLEAN PtrType ) @@ -442,8 +466,17 @@ SetWorker ( } +/** + Wrapper function for set PCD value for non-Pointer type dynamic-ex PCD. + @param ExTokenNumber Token number for dynamic-ex PCD. + @param Guid Token space guid for dynamic-ex PCD. + @param Data Value want to be set. + @param SetSize The size of value. + @return status of ExSetWorker(). + +**/ EFI_STATUS ExSetValueWorker ( IN UINTN ExTokenNumber, @@ -455,8 +488,24 @@ ExSetValueWorker ( return ExSetWorker (ExTokenNumber, Guid, Data, &Size, FALSE); } +/** + Set value for a dynamic PCD entry. + + This routine find the local token number according to dynamic-ex PCD's token + space guid and token number firstly, and invoke callback function if this PCD + entry registered callback function. Finally, invoken general SetWorker to set + PCD value. + + @param ExTokenNumber Dynamic-ex PCD token number. + @param Guid Token space guid for dynamic-ex PCD. + @param Data PCD value want to be set + @param SetSize Size of value. + @param PtrType If TRUE, this PCD entry is pointer type. + If FALSE, this PCD entry is not pointer type. + @return status of SetWorker(). +**/ EFI_STATUS ExSetWorker ( IN UINTN ExTokenNumber, @@ -480,9 +529,16 @@ ExSetWorker ( } +/** + Wrapper function for get PCD value for dynamic-ex PCD. + @param Guid Token space guid for dynamic-ex PCD. + @param ExTokenNumber Token number for dyanmic-ex PCD. + @param GetSize The size of dynamic-ex PCD value. + @return PCD entry in PCD database. +**/ VOID * ExGetWorker ( IN CONST EFI_GUID *Guid, @@ -498,13 +554,24 @@ ExGetWorker ( return GetWorker (GetExPcdTokenNumber (Guid, ExTokenNumber), GetSize); } +/** + Get the PCD entry pointer in PCD database. + + This routine will visit PCD database to find the PCD entry according to given + token number. The given token number is autogened by build tools and it will be + translated to local token number. Local token number contains PCD's type and + offset of PCD entry in PCD database. + @param TokenNumber Token's number, it is autogened by build tools + @param GetSize The size of token's value + @return PCD entry pointer in PCD database +**/ VOID * GetWorker ( - UINTN TokenNumber, - UINTN GetSize + IN UINTN TokenNumber, + IN UINTN GetSize ) { UINT32 Offset; @@ -596,15 +663,26 @@ GetWorker ( } +/** + Get local token number according to dynamic-ex PCD's {token space guid:token number} + + A dynamic-ex type PCD, developer must provide pair of token space guid: token number + in DEC file. PCD database maintain a mapping table that translate pair of {token + space guid: token number} to local token number. + + @param Guid Token space guid for dynamic-ex PCD entry. + @param ExTokenNumber EDES_TODO: Add parameter description + @return local token number for dynamic-ex PCD. +**/ UINTN GetExPcdTokenNumber ( IN CONST EFI_GUID *Guid, IN UINTN ExTokenNumber ) { - UINT32 i; + UINT32 Index; DYNAMICEX_MAPPING *ExMap; EFI_GUID *GuidTable; EFI_GUID *MatchGuid; @@ -625,10 +703,10 @@ GetExPcdTokenNumber ( MatchGuidIdx = MatchGuid - GuidTable; - for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) { - if ((ExTokenNumber == ExMap[i].ExTokenNumber) && - (MatchGuidIdx == ExMap[i].ExGuidIndex)) { - return ExMap[i].LocalTokenNumber; + for (Index = 0; Index < PEI_EXMAPPING_TABLE_SIZE; Index++) { + if ((ExTokenNumber == ExMap[Index].ExTokenNumber) && + (MatchGuidIdx == ExMap[Index].ExGuidIndex)) { + return ExMap[Index].LocalTokenNumber; } } @@ -637,8 +715,12 @@ GetExPcdTokenNumber ( return 0; } +/** + Get PCD database from GUID HOB in PEI phase. + @return Pointer to PCD database. +**/ PEI_PCD_DATABASE * GetPcdDatabase ( VOID @@ -652,8 +734,15 @@ GetPcdDatabase ( return (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob); } +/** + Get SKU ID tabble from PCD database. + + @param LocalTokenNumberTableIdx Index of local token number in token number table. + @param Database PCD database. + @return Pointer to SKU ID array table +**/ SKU_ID * GetSkuIdArray ( IN UINTN LocalTokenNumberTableIdx, @@ -673,30 +762,37 @@ GetSkuIdArray ( } +/** + Get index of PCD entry in size table. + + @param LocalTokenNumberTableIdx Index of this PCD in local token number table. + @param Database Pointer to PCD database in PEI phase. + @return index of PCD entry in size table. +**/ UINTN GetSizeTableIndex ( IN UINTN LocalTokenNumberTableIdx, IN PEI_PCD_DATABASE *Database ) { - UINTN i; + UINTN Index; UINTN SizeTableIdx; UINTN LocalTokenNumber; SKU_ID *SkuIdTable; SizeTableIdx = 0; - for (i=0; iInit.LocalTokenNumberTable[i]; + for (Index=0; IndexInit.LocalTokenNumberTable[Index]; if ((LocalTokenNumber & PCD_DATUM_TYPE_ALL_SET) == PCD_DATUM_TYPE_POINTER) { // // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type // PCD entry. // - if (LocalTokenNumber & PCD_TYPE_VPD) { + if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) { // // We have only one entry for VPD enabled PCD entry: // 1) MAX Size. @@ -717,7 +813,7 @@ GetSizeTableIndex ( // 1) MAX SIZE // 2) Current Size for each SKU_ID (It is equal to MaxSku). // - SkuIdTable = GetSkuIdArray (i, Database); + SkuIdTable = GetSkuIdArray (Index, Database); SizeTableIdx += (UINTN)*SkuIdTable + 1; } } diff --git a/MdeModulePkg/Universal/PCD/Pei/Service.h b/MdeModulePkg/Universal/PCD/Pei/Service.h index eb7a45d30e..006681c494 100644 --- a/MdeModulePkg/Universal/PCD/Pei/Service.h +++ b/MdeModulePkg/Universal/PCD/Pei/Service.h @@ -15,8 +15,8 @@ Module Name: Service.h **/ -#ifndef _SERVICE_H -#define _SERVICE_H +#ifndef _PEI_PCD_SERVICE_H_ +#define _PEI_PCD_SERVICE_H_ #include #include @@ -48,6 +48,30 @@ Module Name: Service.h // // PPI Interface Implementation Declaration. // + +/** + Sets the SKU value for subsequent calls to set or get PCD token values. + + SetSku() sets the SKU Id to be used for subsequent calls to set or get PCD values. + SetSku() is normally called only once by the system. + + For each item (token), the database can hold a single value that applies to all SKUs, + or multiple values, where each value is associated with a specific SKU Id. Items with multiple, + SKU-specific values are called SKU enabled. + + The SKU Id of zero is reserved as a default. The valid SkuId range is 1 to 255. + For tokens that are not SKU enabled, the system ignores any set SKU Id and works with the + single value for that token. For SKU-enabled tokens, the system will use the SKU Id set by the + last call to SetSku(). If no SKU Id is set or the currently set SKU Id isn't valid for the specified token, + the system uses the default SKU Id. If the system attempts to use the default SKU Id and no value has been + set for that Id, the results are unpredictable. + + @param[in] SkuId The SKU value that will be used when the PCD service will retrieve and + set values associated with a PCD token. + + @retval VOID + +**/ VOID EFIAPI PeiPcdSetSku ( @@ -55,7 +79,17 @@ PeiPcdSetSku ( ) ; +/** + Retrieves an 8-bit value for a given PCD token. + + Retrieves the current byte-sized value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT8 value. + +**/ UINT8 EFIAPI PeiPcdGet8 ( @@ -63,7 +97,17 @@ PeiPcdGet8 ( ) ; +/** + Retrieves an 16-bit value for a given PCD token. + + Retrieves the current 16-bits value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT16 value. + +**/ UINT16 EFIAPI PeiPcdGet16 ( @@ -71,7 +115,17 @@ PeiPcdGet16 ( ) ; +/** + Retrieves an 32-bit value for a given PCD token. + + Retrieves the current 32-bits value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT32 value. + +**/ UINT32 EFIAPI PeiPcdGet32 ( @@ -79,7 +133,17 @@ PeiPcdGet32 ( ) ; +/** + Retrieves an 64-bit value for a given PCD token. + + Retrieves the current 64-bits value for a PCD token number. + If the TokenNumber is invalid, the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The UINT64 value. + +**/ UINT64 EFIAPI PeiPcdGet64 ( @@ -87,7 +151,19 @@ PeiPcdGet64 ( ) ; +/** + Retrieves a pointer to a value for a given PCD token. + + Retrieves the current pointer to the buffer for a PCD token number. + Do not make any assumptions about the alignment of the pointer that + is returned by this function call. If the TokenNumber is invalid, + the results are unpredictable. + @param[in] TokenNumber The PCD token number. + + @return The pointer to the buffer to be retrived. + +**/ VOID * EFIAPI PeiPcdGetPtr ( @@ -95,7 +171,19 @@ PeiPcdGetPtr ( ) ; +/** + Retrieves a Boolean value for a given PCD token. + + Retrieves the current boolean value for a PCD token number. + Do not make any assumptions about the alignment of the pointer that + is returned by this function call. If the TokenNumber is invalid, + the results are unpredictable. + + @param[in] TokenNumber The PCD token number. + @return The Boolean value. + +**/ BOOLEAN EFIAPI PeiPcdGetBool ( @@ -103,7 +191,17 @@ PeiPcdGetBool ( ) ; +/** + Retrieves the size of the value for a given PCD token. + + Retrieves the current size of a particular PCD token. + If the TokenNumber is invalid, the results are unpredictable. + @param[in] TokenNumber The PCD token number. + + @return The size of the value for the PCD token. + +**/ UINTN EFIAPI PeiPcdGetSize ( @@ -111,7 +209,20 @@ PeiPcdGetSize ( ) ; +/** + Retrieves an 8-bit value for a given PCD token. + Retrieves the 8-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + + @return The size 8-bit value for the PCD token. + +**/ UINT8 EFIAPI PeiPcdGet8Ex ( @@ -120,7 +231,20 @@ PeiPcdGet8Ex ( ) ; +/** + Retrieves an 16-bit value for a given PCD token. + + Retrieves the 16-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + + @return The size 16-bit value for the PCD token. + +**/ UINT16 EFIAPI PeiPcdGet16Ex ( @@ -129,6 +253,20 @@ PeiPcdGet16Ex ( ) ; +/** + Retrieves an 32-bit value for a given PCD token. + + Retrieves the 32-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + + @return The size 32-bit value for the PCD token. + +**/ UINT32 EFIAPI PeiPcdGet32Ex ( @@ -137,7 +275,20 @@ PeiPcdGet32Ex ( ) ; +/** + Retrieves an 64-bit value for a given PCD token. + + Retrieves the 64-bit value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + @return The size 64-bit value for the PCD token. + +**/ UINT64 EFIAPI PeiPcdGet64Ex ( @@ -146,7 +297,20 @@ PeiPcdGet64Ex ( ) ; +/** + Retrieves a pointer to a value for a given PCD token. + + Retrieves the current pointer to the buffer for a PCD token number. + Do not make any assumptions about the alignment of the pointer that + is returned by this function call. If the TokenNumber is invalid, + the results are unpredictable. + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + + @return The pointer to the buffer to be retrived. + +**/ VOID * EFIAPI PeiPcdGetPtrEx ( @@ -155,7 +319,20 @@ PeiPcdGetPtrEx ( ) ; +/** + Retrieves an Boolean value for a given PCD token. + Retrieves the Boolean value of a particular PCD token. + If the TokenNumber is invalid or the token space + specified by Guid does not exist, the results are + unpredictable. + + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + + @return The size Boolean value for the PCD token. + +**/ BOOLEAN EFIAPI PeiPcdGetBoolEx ( @@ -164,7 +341,18 @@ PeiPcdGetBoolEx ( ) ; +/** + Retrieves the size of the value for a given PCD token. + + Retrieves the current size of a particular PCD token. + If the TokenNumber is invalid, the results are unpredictable. + @param[in] Guid The token space for the token number. + @param[in] TokenNumber The PCD token number. + + @return The size of the value for the PCD token. + +**/ UINTN EFIAPI PeiPcdGetSizeEx ( @@ -173,7 +361,23 @@ PeiPcdGetSizeEx ( ) ; +/** + Sets an 8-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet8 ( @@ -182,7 +386,23 @@ PeiPcdSet8 ( ) ; +/** + Sets an 16-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet16 ( @@ -191,7 +411,23 @@ PeiPcdSet16 ( ) ; +/** + Sets an 32-bit value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet32 ( @@ -200,7 +436,23 @@ PeiPcdSet32 ( ) ; +/** + Sets an 64-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet64 ( @@ -209,6 +461,27 @@ PeiPcdSet64 ( ) ; +/** + Sets a value of a specified size for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] TokenNumber The PCD token number. + @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token. + On input, if the SizeOfValue is greater than the maximum size supported + for this TokenNumber then the output value of SizeOfValue will reflect + the maximum size supported for this TokenNumber. + @param[in] Buffer The buffer to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetPtr ( @@ -218,7 +491,23 @@ PeiPcdSetPtr ( ) ; +/** + Sets an Boolean value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetBool ( @@ -227,7 +516,24 @@ PeiPcdSetBool ( ) ; +/** + Sets an 8-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet8Ex ( @@ -237,6 +543,24 @@ PeiPcdSet8Ex ( ) ; +/** + Sets an 16-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet16Ex ( @@ -246,7 +570,24 @@ PeiPcdSet16Ex ( ) ; +/** + Sets an 32-bit value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet32Ex ( @@ -256,7 +597,24 @@ PeiPcdSet32Ex ( ) ; +/** + Sets an 64-bit value for a given PCD token. + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSet64Ex ( @@ -266,7 +624,28 @@ PeiPcdSet64Ex ( ) ; - +/** + Sets a value of a specified size for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token. + On input, if the SizeOfValue is greater than the maximum size supported + for this TokenNumber then the output value of SizeOfValue will reflect + the maximum size supported for this TokenNumber. + @param[in] Buffer The buffer to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetPtrEx ( @@ -277,7 +656,24 @@ PeiPcdSetPtrEx ( ) ; +/** + Sets an Boolean value for a given PCD token. + + When the PCD service sets a value, it will check to ensure that the + size of the value being set is compatible with the Token's existing definition. + If it is not, an error will be returned. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in] Value The value to set for the PCD token. + + @retval EFI_SUCCESS Procedure returned successfully. + @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data + being set was incompatible with a call to this function. + Use GetSize() to retrieve the size of the target data. + @retval EFI_NOT_FOUND The PCD service could not find the requested token number. + +**/ EFI_STATUS EFIAPI PeiPcdSetBoolEx ( @@ -287,8 +683,18 @@ PeiPcdSetBoolEx ( ) ; +/** + Specifies a function to be called anytime the value of a designated token is changed. + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in] TokenNumber The PCD token number. + @param[in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set. + @retval EFI_SUCCESS The PCD service has successfully established a call event + for the CallBackToken requested. + @retval EFI_NOT_FOUND The PCD service could not find the referenced token number. + +**/ EFI_STATUS EFIAPI PeiRegisterCallBackOnSet ( @@ -298,7 +704,18 @@ PeiRegisterCallBackOnSet ( ) ; +/** + Cancels a previously set callback function for a particular PCD token number. + + @param [in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param [in] TokenNumber The PCD token number. + @param [in] CallBackFunction The function prototype called when the value associated with the CallBackToken is set. + + @retval EFI_SUCCESS The PCD service has successfully established a call event + for the CallBackToken requested. + @retval EFI_NOT_FOUND The PCD service could not find the referenced token number. +**/ EFI_STATUS EFIAPI PcdUnRegisterCallBackOnSet ( @@ -308,7 +725,24 @@ PcdUnRegisterCallBackOnSet ( ) ; +/** + Retrieves the next valid PCD token for a given namespace. + + @param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value. + @param[in, out] TokenNumber A pointer to the PCD token number to use to find the subsequent token number. + If the input token namespace or token number does not exist on the platform, + an error is returned and the value of *TokenNumber is undefined. To retrieve the "first" token, + have the pointer reference a TokenNumber value of 0. If the input token number is 0 and + there is no valid token number for this token namespace, *TokenNumber will be assigned to + 0 and the function return EFI_SUCCESS. If the token number is the last valid token number, + *TokenNumber will be assigned to 0 and the function return EFI_SUCCESS. + @retval EFI_SUCCESS The PCD service retrieved the next valid token number. Or the input token number + is already the last valid token number in the PCD database. + In the later case, *TokenNumber is updated with the value of 0. + @retval EFI_NOT_FOUND If this input token number and token namespace does not exist on the platform. + +**/ EFI_STATUS EFIAPI PeiPcdGetNextToken ( @@ -317,24 +751,58 @@ PeiPcdGetNextToken ( ) ; +/** + Retrieves the next valid PCD token namespace for a given namespace. + + @param[in, out] Guid An indirect pointer to EFI_GUID. On input it designates + a known token namespace from which the search will start. On output, + it designates the next valid token namespace on the platform. If the input + token namespace does not exist on the platform, an error is returned and + the value of *Guid is undefined. If *Guid is NULL, then the GUID of the + first token space of the current platform is assigned to *Guid the function + return EFI_SUCCESS. If *Guid is NULL and there is no namespace exist in + the platform other than the default (NULL) tokennamespace, *Guid is unchanged + and the function return EFI_SUCCESS. If this input token namespace is the last + namespace on the platform, *Guid will be assigned to NULL and the function return + EFI_SUCCESS. + + @retval EFI_SUCCESS The PCD service retrieved the next valid token space Guid. + Or the input token space Guid is already the last valid token space Guid + in the PCD database. In the later case, *Guid is updated with the value of NULL. + @retval EFI_NOT_FOUND If the input token namespace does not exist on the platform. +**/ EFI_STATUS EFIAPI PeiPcdGetNextTokenSpace ( - IN CONST EFI_GUID **Guid + IN OUT CONST EFI_GUID **Guid ) ; /* Internal Function definitions */ +/** + Get PCD database from GUID HOB in PEI phase. + + @return Pointer to PCD database. +**/ PEI_PCD_DATABASE * GetPcdDatabase ( VOID ) ; +/** + Wrapper function for setting non-pointer type value for a PCD entry. + + @param TokenNumber Pcd token number autogenerated by build tools. + @param Data Value want to be set for PCD entry + @param Size Size of value. + @return status of SetWorker. + +**/ EFI_STATUS SetValueWorker ( IN UINTN TokenNumber, @@ -343,7 +811,21 @@ SetValueWorker ( ) ; +/** + Set value for an PCD entry + @param TokenNumber Pcd token number autogenerated by build tools. + @param Data Value want to be set for PCD entry + @param Size Size of value. + @param PtrType If TRUE, the type of PCD entry's value is Pointer. + If False, the type of PCD entry's value is not Pointer. + + @retval EFI_INVALID_PARAMETER If this PCD type is VPD, VPD PCD can not be set. + @retval EFI_INVALID_PARAMETER If Size can not be set to size table. + @retval EFI_NOT_FOUND If value type of PCD entry is intergrate, but not in + range of UINT8, UINT16, UINT32, UINT64 + @retval EFI_NOT_FOUND Can not find the PCD type according to token number. +**/ EFI_STATUS SetWorker ( IN UINTN TokenNumber, @@ -353,7 +835,17 @@ SetWorker ( ) ; +/** + Wrapper function for set PCD value for non-Pointer type dynamic-ex PCD. + @param ExTokenNumber Token number for dynamic-ex PCD. + @param Guid Token space guid for dynamic-ex PCD. + @param Data Value want to be set. + @param SetSize The size of value. + + @return status of ExSetWorker(). + +**/ EFI_STATUS ExSetValueWorker ( IN UINTN ExTokenNumber, @@ -363,8 +855,24 @@ ExSetValueWorker ( ) ; +/** + Set value for a dynamic PCD entry. + + This routine find the local token number according to dynamic-ex PCD's token + space guid and token number firstly, and invoke callback function if this PCD + entry registered callback function. Finally, invoken general SetWorker to set + PCD value. + + @param ExTokenNumber Dynamic-ex PCD token number. + @param Guid Token space guid for dynamic-ex PCD. + @param Data PCD value want to be set + @param SetSize Size of value. + @param PtrType If TRUE, this PCD entry is pointer type. + If FALSE, this PCD entry is not pointer type. + + @return status of SetWorker(). - +**/ EFI_STATUS ExSetWorker ( IN UINTN ExTokenNumber, @@ -375,8 +883,20 @@ ExSetWorker ( ) ; +/** + Get the PCD entry pointer in PCD database. + + This routine will visit PCD database to find the PCD entry according to given + token number. The given token number is autogened by build tools and it will be + translated to local token number. Local token number contains PCD's type and + offset of PCD entry in PCD database. + + @param TokenNumber Token's number, it is autogened by build tools + @param GetSize The size of token's value + @return PCD entry pointer in PCD database +**/ VOID * GetWorker ( IN UINTN TokenNumber, @@ -384,8 +904,16 @@ GetWorker ( ) ; +/** + Wrapper function for get PCD value for dynamic-ex PCD. + + @param Guid Token space guid for dynamic-ex PCD. + @param ExTokenNumber Token number for dyanmic-ex PCD. + @param GetSize The size of dynamic-ex PCD value. + @return PCD entry in PCD database. +**/ VOID * ExGetWorker ( IN CONST EFI_GUID *Guid, @@ -400,7 +928,19 @@ typedef struct { UINT32 LocalTokenNumberAlias; } EX_PCD_ENTRY_ATTRIBUTE; +/** + Get local token number according to dynamic-ex PCD's {token space guid:token number} + + A dynamic-ex type PCD, developer must provide pair of token space guid: token number + in DEC file. PCD database maintain a mapping table that translate pair of {token + space guid: token number} to local token number. + + @param Guid Token space guid for dynamic-ex PCD entry. + @param ExTokenNumber EDES_TODO: Add parameter description + @return local token number for dynamic-ex PCD. + +**/ UINTN GetExPcdTokenNumber ( IN CONST EFI_GUID *Guid, @@ -408,26 +948,46 @@ GetExPcdTokenNumber ( ) ; +/** + The function registers the CallBackOnSet fucntion + according to TokenNumber and EFI_GUID space. + @param TokenNumber The token number. + @param Guid The GUID space. + @param CallBackFunction The Callback function to be registered. + @param Register To register or unregister the callback function. - + @retval EFI_SUCCESS If the Callback function is registered. + @retval EFI_NOT_FOUND If the PCD Entry is not found according to Token Number and GUID space. + @retval EFI_OUT_OF_RESOURCES If the callback function can't be registered because there is not free + slot left in the CallbackFnTable. +**/ EFI_STATUS PeiRegisterCallBackWorker ( IN UINTN TokenNumber, - IN CONST GUID *Guid, OPTIONAL + IN CONST EFI_GUID *Guid, OPTIONAL IN PCD_PPI_CALLBACK CallBackFunction, IN BOOLEAN Register ); - - - +/** + The function builds the PCD database. +**/ VOID BuildPcdDatabase ( VOID ) ; +/** + Get SKU ID tabble from PCD database. + + @param LocalTokenNumberTableIdx Index of local token number in token number table. + @param Database PCD Database in PEI phase + + @return Pointer to SKU ID array table + +**/ SKU_ID * GetSkuIdArray ( IN UINTN LocalTokenNumberTableIdx, @@ -435,6 +995,15 @@ GetSkuIdArray ( ) ; +/** + Get index of PCD entry in size table. + + @param LocalTokenNumberTableIdx Index of this PCD in local token number table. + @param Database Pointer to PCD database. + + @return index of PCD entry in size table. + +**/ UINTN GetSizeTableIndex ( IN UINTN LocalTokenNumberTableIdx, @@ -442,6 +1011,19 @@ GetSizeTableIndex ( ) ; +/** + Get PCD value's size for POINTER type PCD. + + The POINTER type PCD's value will be stored into a buffer in specificed size. + The max size of this PCD's value is described in PCD's definition in DEC file. + + @param LocalTokenNumberTableIdx Index of PCD token number in PCD token table + @param MaxSize Maxmium size of PCD's value + @param Database Pcd database in PEI phase. + + @return PCD value's size for POINTER type PCD. + +**/ UINTN GetPtrTypeSize ( IN UINTN LocalTokenNumberTableIdx, @@ -450,8 +1032,20 @@ GetPtrTypeSize ( ) ; +/** + Set PCD value's size for POINTER type PCD. + + The POINTER type PCD's value will be stored into a buffer in specificed size. + The max size of this PCD's value is described in PCD's definition in DEC file. + @param LocalTokenNumberTableIdx Index of PCD token number in PCD token table + @param CurrentSize Maxmium size of PCD's value + @param Database Pcd database in PEI phase. + @retval TRUE Success to set PCD's value size, which is not exceed maxmium size + @retval FALSE Fail to set PCD's value size, which maybe exceed maxmium size + +**/ BOOLEAN SetPtrTypeSize ( IN UINTN LocalTokenNumberTableIdx, -- 2.39.2