From 4276d5dacfd4812abc1d7a1bd1da995d7002ee9e Mon Sep 17 00:00:00 2001 From: qwang12 Date: Fri, 23 Jun 2006 14:41:16 +0000 Subject: 1) Add in support to traverse taken space 2) Remove unused import in DynamicTokenValue.java. 3) Support Byte Stream input for Pointer type Dynamic PCD entry in FPD file. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@616 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/DxePcdLib/DxePcdLib.c | 102 ++++++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 19 deletions(-) (limited to 'MdePkg/Library/DxePcdLib/DxePcdLib.c') diff --git a/MdePkg/Library/DxePcdLib/DxePcdLib.c b/MdePkg/Library/DxePcdLib/DxePcdLib.c index c20fad2302..ee517715f5 100644 --- a/MdePkg/Library/DxePcdLib/DxePcdLib.c +++ b/MdePkg/Library/DxePcdLib/DxePcdLib.c @@ -483,28 +483,47 @@ LibPcdSet64 ( /** Sets a buffer for the token specified by TokenNumber to - the value specified by Value. Value is returned. - If Value is NULL, then ASSERT(). + the value specified by Buffer and SizeOfValue. Buffer to + be set is returned. The content of the buffer could be + overwritten if a Callback on SET is registered with this + TokenNumber. + + If SizeOfValue is greater than the maximum + size support by TokenNumber, then set SizeOfValue to the + maximum size supported by TokenNumber and return NULL to + indicate that the set operation was not actually performed. + + If SizeOfValue > 0 and Buffer is NULL, then ASSERT(). @param[in] TokenNumber The PCD token number to set a current value for. + @param[in,out] SizeOfBuffer The size, in bytes, of Buffer. @param[in] Value A pointer to the buffer to set. @retval VOID* Return the pointer for the buffer been set. **/ + VOID * EFIAPI LibPcdSetPtr ( - IN UINTN TokenNumber, - IN UINTN SizeOfBuffer, - IN VOID *Buffer + IN UINTN TokenNumber, + IN OUT UINTN *SizeOfBuffer, + IN VOID *Buffer ) { EFI_STATUS Status; + UINTN Size; - ASSERT (Buffer != NULL); + ASSERT ((*SizeOfBuffer > 0) && Buffer == NULL); - Status = mPcd->SetPtr (TokenNumber, SizeOfBuffer, Buffer); + Size = LibPcdGetSize (TokenNumber); + + if (*SizeOfBuffer > Size) { + *SizeOfBuffer = Size; + return NULL; + } + + Status = mPcd->SetPtr (TokenNumber, *SizeOfBuffer, Buffer); ASSERT_EFI_ERROR (Status); @@ -678,34 +697,45 @@ LibPcdSetEx64 ( /** - Sets a buffer for the token specified by TokenNumber and - Guid to the value specified by Value. Value is returned. - If Guid is NULL, then ASSERT(). - If Value is NULL, then ASSERT(). + Sets a buffer for the token specified by TokenNumber to the value specified by + Buffer and SizeOfValue. Buffer is returned. If SizeOfValue is greater than + the maximum size support by TokenNumber, then set SizeOfValue to the maximum size + supported by TokenNumber and return NULL to indicate that the set operation + was not actually performed. + + If SizeOfValue > 0 and Buffer is NULL, then ASSERT(). @param[in] Guid Pointer to a 128-bit unique value that designates which namespace to set a value from. @param[in] TokenNumber The PCD token number to set a current value for. - @param[in] Value The 8-bit value to set. + @param[in, out] SizeOfBuffer The size, in bytes, of Buffer. + @param[in] Buffer A pointer to the buffer to set. - @retval VOID * Return the value been set. + @retval VOID * Return the pinter to the buffer been set. **/ VOID * EFIAPI LibPcdSetExPtr ( - IN CONST GUID *Guid, - IN UINTN TokenNumber, - IN UINTN SizeOfBuffer, - IN VOID *Buffer + IN CONST GUID *Guid, + IN UINTN TokenNumber, + IN OUT UINTN *SizeOfBuffer, + IN VOID *Buffer ) { - EFI_STATUS Status; + EFI_STATUS Status; + UINTN Size; ASSERT (Guid != NULL); ASSERT (Buffer != NULL); - Status = mPcd->SetPtrEx (Guid, TokenNumber, SizeOfBuffer, Buffer); + Size = LibPcdGetExSize (Guid, TokenNumber); + if (*SizeOfBuffer > Size) { + *SizeOfBuffer = Size; + return NULL; + } + + Status = mPcd->SetPtrEx (Guid, TokenNumber, *SizeOfBuffer, Buffer); ASSERT_EFI_ERROR (Status); @@ -849,3 +879,37 @@ LibPcdGetNextToken ( return TokenNumber; } + + +/** + Retrieves the next PCD token space from a token space specified by Guid. + Guid of NULL is reserved to mark the default local token namespace on the current + platform. If Guid is NULL, then the GUID of the first non-local token space of the + current platform is returned. If Guid is the last non-local token space, + then NULL is returned. + + If Guid is not NULL and is not a valid token space in the current platform, then ASSERT(). + + + + @param[in] Pointer to a 128-bit unique value that designates from which namespace + to start the search. + + @retval CONST GUID * The next valid token namespace. + +**/ +CONST GUID* +EFIAPI +LibPcdGetNextTokenSpace ( + IN CONST GUID *Guid + ) +{ + EFI_STATUS Status; + + Status = mPcd->GetNextTokenSpace (&Guid); + + ASSERT_EFI_ERROR (Status); + + return Guid; +} + -- cgit v1.2.3