X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;ds=sidebyside;f=MdePkg%2FLibrary%2FDxePcdLib%2FDxePcdLib.c;h=6e3e4e70697f48779c40b4d980fa2b52e14c8b32;hb=9344f0921518309295da89c221d10cbead8531aa;hp=b746614d5be64fd4d8c6b51ca25dadb1b27408aa;hpb=bb5545b663e1d8ac4fd37003d5ba26fafdad5831;p=mirror_edk2.git
diff --git a/MdePkg/Library/DxePcdLib/DxePcdLib.c b/MdePkg/Library/DxePcdLib/DxePcdLib.c
index b746614d5b..6e3e4e7069 100644
--- a/MdePkg/Library/DxePcdLib/DxePcdLib.c
+++ b/MdePkg/Library/DxePcdLib/DxePcdLib.c
@@ -1,65 +1,138 @@
/** @file
Implementation of PcdLib class library for DXE phase.
-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
-which accompanies this distribution. The full text of the license may be found at
-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.
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent
-Module Name: DxePcdLib.c
-
**/
-static PCD_PROTOCOL *mPcd;
+
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+PCD_PROTOCOL *mPcd = NULL;
+EFI_PCD_PROTOCOL *mPiPcd = NULL;
+GET_PCD_INFO_PROTOCOL *mPcdInfo = NULL;
+EFI_GET_PCD_INFO_PROTOCOL *mPiPcdInfo = NULL;
/**
- The constructor function caches the PCD_PROTOCOL pointer.
+ Retrieves the PI PCD protocol from the handle database.
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The constructor always return EFI_SUCCESS.
+ @retval EFI_PCD_PROTOCOL * The pointer to the EFI_PCD_PROTOCOL.
+**/
+EFI_PCD_PROTOCOL *
+EFIAPI
+GetPiPcdProtocol (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ if (mPiPcd == NULL) {
+ //
+ // PI Pcd protocol defined in PI 1.2 vol3 should be installed before the module
+ // access DynamicEx type PCD.
+ //
+ Status = gBS->LocateProtocol (&gEfiPcdProtocolGuid, NULL, (VOID **) &mPiPcd);
+ ASSERT_EFI_ERROR (Status);
+ ASSERT (mPiPcd != NULL);
+ }
+ return mPiPcd;
+}
+
+/**
+ Retrieves the PCD protocol from the handle database.
+ @retval PCD_PROTOCOL * The pointer to the PCD_PROTOCOL.
**/
-EFI_STATUS
+PCD_PROTOCOL *
EFIAPI
-PcdLibConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
+GetPcdProtocol (
+ VOID
)
{
EFI_STATUS Status;
- Status = gBS->LocateProtocol (&gPcdProtocolGuid, NULL, (VOID **)&mPcd);
- ASSERT_EFI_ERROR (Status);
+ if (mPcd == NULL) {
+ //
+ // PCD protocol need to be installed before the module access Dynamic type PCD.
+ // But dynamic type PCD is not required in PI 1.2 specification.
+ //
+ Status = gBS->LocateProtocol (&gPcdProtocolGuid, NULL, (VOID **)&mPcd);
+ ASSERT_EFI_ERROR (Status);
+ ASSERT (mPcd != NULL);
+ }
+ return mPcd;
+}
+
+/**
+ Retrieves the PI PCD info protocol from the handle database.
+
+ @retval EFI_GET_PCD_INFO_PROTOCOL * The pointer to the EFI_GET_PCD_INFO_PROTOCOL defined in PI 1.2.1 Vol 3.
+**/
+EFI_GET_PCD_INFO_PROTOCOL *
+GetPiPcdInfoProtocolPointer (
+ VOID
+ )
+{
+ EFI_STATUS Status;
- return EFI_SUCCESS;
+ if (mPiPcdInfo == NULL) {
+ Status = gBS->LocateProtocol (&gEfiGetPcdInfoProtocolGuid, NULL, (VOID **)&mPiPcdInfo);
+ ASSERT_EFI_ERROR (Status);
+ ASSERT (mPiPcdInfo != NULL);
+ }
+ return mPiPcdInfo;
}
+/**
+ Retrieves the PCD info protocol from the handle database.
+
+ @retval GET_PCD_INFO_PROTOCOL * The pointer to the GET_PCD_INFO_PROTOCOL.
+**/
+GET_PCD_INFO_PROTOCOL *
+GetPcdInfoProtocolPointer (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ if (mPcdInfo == NULL) {
+ Status = gBS->LocateProtocol (&gGetPcdInfoProtocolGuid, NULL, (VOID **)&mPcdInfo);
+ ASSERT_EFI_ERROR (Status);
+ ASSERT (mPcdInfo != NULL);
+ }
+ return mPcdInfo;
+}
/**
+ This function provides a means by which SKU support can be established in the PCD infrastructure.
+
Sets the current SKU in the PCD database to the value specified by SkuId. SkuId is returned.
- @param[in] SkuId The SKU value that will be used when the PCD service will retrieve and
- set values associated with a PCD token.
+ @param SkuId The SKU value that will be used when the PCD service retrieves and sets values
+ associated with a PCD token.
- @retval SKU_ID Return the SKU ID that just be set.
+ @return Return the SKU ID that just be set.
**/
UINTN
EFIAPI
LibPcdSetSku (
- IN UINTN SkuId
+ IN UINTN SkuId
)
{
- ASSERT (SkuId < 0x100);
-
- mPcd->SetSku (SkuId);
+ GetPcdProtocol()->SetSku (SkuId);
return SkuId;
}
@@ -67,11 +140,13 @@ LibPcdSetSku (
/**
- Returns the 8-bit value for the token specified by TokenNumber.
+ This function provides a means by which to retrieve a value for a given PCD token.
+
+ Returns the 8-bit value for the token specified by TokenNumber.
- @param[in] The PCD token number to retrieve a current value for.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINT8 Returns the 8-bit value for the token specified by TokenNumber.
+ @return Returns the 8-bit value for the token specified by TokenNumber.
**/
UINT8
@@ -80,17 +155,19 @@ LibPcdGet8 (
IN UINTN TokenNumber
)
{
- return mPcd->Get8 (TokenNumber);
+ return GetPcdProtocol()->Get8 (TokenNumber);
}
/**
- Returns the 16-bit value for the token specified by TokenNumber.
+ This function provides a means by which to retrieve a value for a given PCD token.
- @param[in] The PCD token number to retrieve a current value for.
+ Returns the 16-bit value for the token specified by TokenNumber.
- @retval UINT16 Returns the 16-bit value for the token specified by TokenNumber.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
+
+ @return Returns the 16-bit value for the token specified by TokenNumber.
**/
UINT16
@@ -99,17 +176,19 @@ LibPcdGet16 (
IN UINTN TokenNumber
)
{
- return mPcd->Get16 (TokenNumber);
+ return GetPcdProtocol()->Get16 (TokenNumber);
}
/**
- Returns the 32-bit value for the token specified by TokenNumber.
+ This function provides a means by which to retrieve a value for a given PCD token.
+
+ Returns the 32-bit value for the token specified by TokenNumber.
@param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINT32 Returns the 32-bit value for the token specified by TokenNumber.
+ @return Returns the 32-bit value for the token specified by TokenNumber.
**/
UINT32
@@ -118,17 +197,19 @@ LibPcdGet32 (
IN UINTN TokenNumber
)
{
- return mPcd->Get32 (TokenNumber);
+ return GetPcdProtocol()->Get32 (TokenNumber);
}
/**
+ This function provides a means by which to retrieve a value for a given PCD token.
+
Returns the 64-bit value for the token specified by TokenNumber.
@param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINT64 Returns the 64-bit value for the token specified by TokenNumber.
+ @return Returns the 64-bit value for the token specified by TokenNumber.
**/
UINT64
@@ -137,17 +218,19 @@ LibPcdGet64 (
IN UINTN TokenNumber
)
{
- return mPcd->Get64 (TokenNumber);
+ return GetPcdProtocol()->Get64 (TokenNumber);
}
/**
+ This function provides a means by which to retrieve a value for a given PCD token.
+
Returns the pointer to the buffer of the token specified by TokenNumber.
@param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval VOID* Returns the pointer to the token specified by TokenNumber.
+ @return Returns the pointer to the token specified by TokenNumber.
**/
VOID *
@@ -156,36 +239,38 @@ LibPcdGetPtr (
IN UINTN TokenNumber
)
{
- return mPcd->GetPtr (TokenNumber);
+ return GetPcdProtocol()->GetPtr (TokenNumber);
}
/**
- Returns the Boolean value of the token specified by TokenNumber.
+ This function provides a means by which to retrieve a value for a given PCD token.
+
+ Returns the Boolean value of the token specified by TokenNumber.
@param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval BOOLEAN Returns the Boolean value of the token specified by TokenNumber.
+ @return Returns the Boolean value of the token specified by TokenNumber.
**/
-BOOLEAN
+BOOLEAN
EFIAPI
LibPcdGetBool (
IN UINTN TokenNumber
)
{
- return mPcd->GetBool (TokenNumber);
+ return GetPcdProtocol()->GetBool (TokenNumber);
}
/**
- Returns the size of the token specified by TokenNumber.
+ This function provides a means by which to retrieve the size of a given PCD token.
@param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINTN Returns the size of the token specified by TokenNumber.
+ @return Returns the size of the token specified by TokenNumber.
**/
UINTN
@@ -194,20 +279,23 @@ LibPcdGetSize (
IN UINTN TokenNumber
)
{
- return mPcd->GetSize (TokenNumber);
+ return GetPcdProtocol()->GetSize (TokenNumber);
}
/**
+ This function provides a means by which to retrieve a value for a given PCD token.
+
Returns the 8-bit value for the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINT8 Return the UINT8.
+ @return Return the UINT8.
**/
UINT8
@@ -218,20 +306,23 @@ LibPcdGetEx8 (
)
{
ASSERT (Guid != NULL);
-
- return mPcd->Get8Ex (Guid, TokenNumber);
+
+ return GetPiPcdProtocol()->Get8 (Guid, TokenNumber);
}
/**
+ This function provides a means by which to retrieve a value for a given PCD token.
+
Returns the 16-bit value for the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ If Guid is NULL, then ASSERT().
- @retval UINT16 Return the UINT16.
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
+
+ @return Return the UINT16.
**/
UINT16
@@ -243,19 +334,19 @@ LibPcdGetEx16 (
{
ASSERT (Guid != NULL);
- return mPcd->Get16Ex (Guid, TokenNumber);
+ return GetPiPcdProtocol()->Get16 (Guid, TokenNumber);
}
/**
Returns the 32-bit value for the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
+ If Guid is NULL, then ASSERT().
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINT32 Return the UINT32.
+ @return Return the UINT32.
**/
UINT32
@@ -267,20 +358,23 @@ LibPcdGetEx32 (
{
ASSERT (Guid != NULL);
- return mPcd->Get32Ex (Guid, TokenNumber);
+ return GetPiPcdProtocol()->Get32 (Guid, TokenNumber);
}
/**
+ This function provides a means by which to retrieve a value for a given PCD token.
+
Returns the 64-bit value for the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
- @retval UINT64 Return the UINT64.
+ @return Return the UINT64.
**/
UINT64
@@ -291,21 +385,24 @@ LibPcdGetEx64 (
)
{
ASSERT (Guid != NULL);
-
- return mPcd->Get64Ex (Guid, TokenNumber);
+
+ return GetPiPcdProtocol()->Get64 (Guid, TokenNumber);
}
/**
- Returns the pointer to the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
+ This function provides a means by which to retrieve a value for a given PCD token.
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ Returns the pointer to the buffer of token specified by TokenNumber and Guid.
+
+ If Guid is NULL, then ASSERT().
- @retval VOID* Return the VOID* pointer.
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
+
+ @return Return the VOID* pointer.
**/
VOID *
@@ -317,20 +414,23 @@ LibPcdGetExPtr (
{
ASSERT (Guid != NULL);
- return mPcd->GetPtrEx (Guid, TokenNumber);
+ return GetPiPcdProtocol()->GetPtr (Guid, TokenNumber);
}
/**
- Returns the Boolean value of the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
+ This function provides a means by which to retrieve a value for a given PCD token.
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ Returns the Boolean value of the token specified by TokenNumber and Guid.
+
+ If Guid is NULL, then ASSERT().
- @retval BOOLEAN Return the BOOLEAN.
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
+
+ @return Return the BOOLEAN.
**/
BOOLEAN
@@ -342,20 +442,23 @@ LibPcdGetExBool (
{
ASSERT (Guid != NULL);
- return mPcd->GetBoolEx (Guid, TokenNumber);
+ return GetPiPcdProtocol()->GetBool (Guid, TokenNumber);
}
/**
- Returns the size of the token specified by TokenNumber and Guid.
- If Guid is NULL, then ASSERT().
+ This function provides a means by which to retrieve the size of a given PCD token.
- @param[in] Guid Pointer to a 128-bit unique value that designates
- which namespace to retrieve a value from.
- @param[in] TokenNumber The PCD token number to retrieve a current value for.
+ Returns the size of the token specified by TokenNumber and Guid.
- @retval UINTN Return the size.
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The pointer to a 128-bit unique value that designates
+ which namespace to retrieve a value from.
+ @param[in] TokenNumber The PCD token number to retrieve a current value for.
+
+ @return Return the size.
**/
UINTN
@@ -367,19 +470,22 @@ LibPcdGetExSize (
{
ASSERT (Guid != NULL);
- return mPcd->GetSizeEx (Guid, TokenNumber);
+ return GetPiPcdProtocol()->GetSize (Guid, TokenNumber);
}
+#ifndef DISABLE_NEW_DEPRECATED_INTERFACES
/**
- Sets the 8-bit value for the token specified by TokenNumber
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 8-bit value for the token specified by TokenNumber
to the value specified by Value. Value is returned.
-
- @param[in] TokenNumber The PCD token number to set a current value for.
- @param[in] Value The 8-bit value to set.
- @retval UINT8 Return the value been set.
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 8-bit value to set.
+
+ @return Return the value that was set.
**/
UINT8
@@ -389,25 +495,23 @@ LibPcdSet8 (
IN UINT8 Value
)
{
- EFI_STATUS Status;
-
- Status = mPcd->Set8 (TokenNumber, Value);
+ GetPcdProtocol()->Set8 (TokenNumber, Value);
- ASSERT_EFI_ERROR (Status);
-
return Value;
}
/**
- Sets the 16-bit value for the token specified by TokenNumber
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 16-bit value for the token specified by TokenNumber
to the value specified by Value. Value is returned.
-
- @param[in] TokenNumber The PCD token number to set a current value for.
- @param[in] Value The 16-bit value to set.
- @retval UINT16 Return the value been set.
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 16-bit value to set.
+
+ @return Return the value that was set.
**/
UINT16
@@ -417,38 +521,33 @@ LibPcdSet16 (
IN UINT16 Value
)
{
- EFI_STATUS Status;
-
- Status = mPcd->Set16 (TokenNumber, Value);
+ GetPcdProtocol()->Set16 (TokenNumber, Value);
- ASSERT_EFI_ERROR (Status);
-
return Value;
}
/**
- Sets the 32-bit value for the token specified by TokenNumber
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 32-bit value for the token specified by TokenNumber
to the value specified by Value. Value is returned.
-
- @param[in] TokenNumber The PCD token number to set a current value for.
- @param[in] Value The 32-bit value to set.
- @retval UINT32 Return the value been set.
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 32-bit value to set.
+
+ @return Return the value that was set.
**/
UINT32
EFIAPI
LibPcdSet32 (
IN UINTN TokenNumber,
- IN UINT32 Value
+ IN UINT32 Value
)
{
- EFI_STATUS Status;
- Status = mPcd->Set32 (TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPcdProtocol()->Set32 (TokenNumber, Value);
return Value;
}
@@ -456,27 +555,25 @@ LibPcdSet32 (
/**
- Sets the 64-bit value for the token specified by TokenNumber
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 64-bit value for the token specified by TokenNumber
to the value specified by Value. Value is returned.
-
- @param[in] TokenNumber The PCD token number to set a current value for.
- @param[in] Value The 64-bit value to set.
- @retval UINT64 Return the value been set.
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 64-bit value to set.
+
+ @return Return the value that was set.
**/
UINT64
EFIAPI
LibPcdSet64 (
IN UINTN TokenNumber,
- IN UINT64 Value
+ IN UINT64 Value
)
{
- EFI_STATUS Status;
-
- Status = mPcd->Set64 (TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPcdProtocol()->Set64 (TokenNumber, Value);
return Value;
}
@@ -484,66 +581,65 @@ LibPcdSet64 (
/**
- Sets a buffer for the token specified by TokenNumber to
- 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.
+ This function provides a means by which to set a value for a given PCD token.
- @retval VOID* Return the pointer for the buffer been set.
+ Sets a buffer for the token specified by TokenNumber to the value
+ specified by Buffer and SizeOfBuffer. Buffer is returned.
+ If SizeOfBuffer is greater than the maximum size support by TokenNumber,
+ then set SizeOfBuffer to the maximum size supported by TokenNumber and
+ return NULL to indicate that the set operation was not actually performed.
-**/
+ If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the
+ maximum size supported by TokenName and NULL must be returned.
+
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 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] Buffer A pointer to the buffer to set.
+
+ @return Return the pointer for the buffer been set.
+
+**/
VOID *
EFIAPI
LibPcdSetPtr (
- IN UINTN TokenNumber,
- IN OUT UINTN *SizeOfBuffer,
- IN VOID *Buffer
+ IN UINTN TokenNumber,
+ IN OUT UINTN *SizeOfBuffer,
+ IN CONST VOID *Buffer
)
{
EFI_STATUS Status;
- UINTN Size;
+ UINTN InputSizeOfBuffer;
+
+ ASSERT (SizeOfBuffer != NULL);
if (*SizeOfBuffer > 0) {
ASSERT (Buffer != NULL);
}
- Size = LibPcdGetSize (TokenNumber);
-
- if (*SizeOfBuffer > Size) {
- *SizeOfBuffer = Size;
+ InputSizeOfBuffer = *SizeOfBuffer;
+ Status = GetPcdProtocol()->SetPtr (TokenNumber, SizeOfBuffer, (VOID *) Buffer);
+ if (EFI_ERROR (Status) && (*SizeOfBuffer < InputSizeOfBuffer)) {
return NULL;
}
- Status = mPcd->SetPtr (TokenNumber, *SizeOfBuffer, Buffer);
-
- ASSERT_EFI_ERROR (Status);
-
- return Buffer;
+ return (VOID *)Buffer;
}
/**
- Sets the Boolean value for the token specified by TokenNumber
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the Boolean value for the token specified by TokenNumber
to the value specified by Value. Value is returned.
-
- @param[in] TokenNumber The PCD token number to set a current value for.
- @param[in] Value The boolean value to set.
- @retval BOOLEAN Return the value been set.
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The boolean value to set.
+
+ @return Return the value that was set.
**/
BOOLEAN
@@ -553,11 +649,7 @@ LibPcdSetBool (
IN BOOLEAN Value
)
{
- EFI_STATUS Status;
-
- Status = mPcd->SetBool (TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPcdProtocol()->SetBool (TokenNumber, Value);
return Value;
}
@@ -565,16 +657,19 @@ LibPcdSetBool (
/**
- Sets the 8-bit value for the token specified by TokenNumber and
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 8-bit value for the token specified by TokenNumber and
Guid to the value specified by Value. Value is returned.
+
If Guid 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.
- @retval UINT8 Return the value been set.
+ @param[in] Guid The 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.
+
+ @return Return the value that was set.
**/
UINT8
@@ -585,13 +680,9 @@ LibPcdSetEx8 (
IN UINT8 Value
)
{
- EFI_STATUS Status;
-
ASSERT (Guid != NULL);
- Status = mPcd->Set8Ex (Guid, TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPiPcdProtocol()->Set8 (Guid, TokenNumber, Value);
return Value;
}
@@ -599,16 +690,19 @@ LibPcdSetEx8 (
/**
- Sets the 16-bit value for the token specified by TokenNumber and
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 16-bit value for the token specified by TokenNumber and
Guid to the value specified by Value. Value is returned.
+
If Guid 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 16-bit value to set.
- @retval UINT8 Return the value been set.
+ @param[in] Guid The 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 16-bit value to set.
+
+ @return Return the value that was set.
**/
UINT16
@@ -619,13 +713,9 @@ LibPcdSetEx16 (
IN UINT16 Value
)
{
- EFI_STATUS Status;
-
ASSERT (Guid != NULL);
- Status = mPcd->Set16Ex (Guid, TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPiPcdProtocol()->Set16 (Guid, TokenNumber, Value);
return Value;
}
@@ -633,16 +723,19 @@ LibPcdSetEx16 (
/**
- Sets the 32-bit value for the token specified by TokenNumber and
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 32-bit value for the token specified by TokenNumber and
Guid to the value specified by Value. Value is returned.
+
If Guid 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 32-bit value to set.
- @retval UINT32 Return the value been set.
+ @param[in] Guid The 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 32-bit value to set.
+
+ @return Return the value that was set.
**/
UINT32
@@ -650,16 +743,12 @@ EFIAPI
LibPcdSetEx32 (
IN CONST GUID *Guid,
IN UINTN TokenNumber,
- IN UINT32 Value
+ IN UINT32 Value
)
{
- EFI_STATUS Status;
-
ASSERT (Guid != NULL);
- Status = mPcd->Set32Ex (Guid, TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPiPcdProtocol()->Set32 (Guid, TokenNumber, Value);
return Value;
}
@@ -667,16 +756,19 @@ LibPcdSetEx32 (
/**
- Sets the 64-bit value for the token specified by TokenNumber and
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 64-bit value for the token specified by TokenNumber and
Guid to the value specified by Value. Value is returned.
+
If Guid 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 64-bit value to set.
- @retval UINT64 Return the value been set.
+ @param[in] Guid The 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 64-bit value to set.
+
+ @return Return the value that was set.
**/
UINT64
@@ -684,16 +776,12 @@ EFIAPI
LibPcdSetEx64 (
IN CONST GUID *Guid,
IN UINTN TokenNumber,
- IN UINT64 Value
+ IN UINT64 Value
)
{
- EFI_STATUS Status;
-
ASSERT (Guid != NULL);
- Status = mPcd->Set64Ex (Guid, TokenNumber, Value);
-
- ASSERT_EFI_ERROR (Status);
+ GetPiPcdProtocol()->Set64 (Guid, TokenNumber, Value);
return Value;
}
@@ -701,21 +789,25 @@ LibPcdSetEx64 (
/**
- 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, out] SizeOfBuffer The size, in bytes, of Buffer.
- @param[in] Buffer A pointer to the buffer to set.
+ This function provides a means by which to set a value for a given PCD token.
- @retval VOID * Return the pinter to the buffer been set.
+ Sets a buffer for the token specified by TokenNumber to the value specified by
+ Buffer and SizeOfBuffer. Buffer is returned. If SizeOfBuffer is greater than
+ the maximum size support by TokenNumber, then set SizeOfBuffer to the maximum size
+ supported by TokenNumber and return NULL to indicate that the set operation
+ was not actually performed.
+
+ If Guid is NULL, then ASSERT().
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
+
+ @param[in] Guid The 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, out] SizeOfBuffer The size, in bytes, of Buffer.
+ @param[in] Buffer A pointer to the buffer to set.
+
+ @return Return the pointer to the buffer been set.
**/
VOID *
@@ -728,7 +820,7 @@ LibPcdSetExPtr (
)
{
EFI_STATUS Status;
- UINTN Size;
+ UINTN InputSizeOfBuffer;
ASSERT (Guid != NULL);
@@ -738,33 +830,31 @@ LibPcdSetExPtr (
ASSERT (Buffer != NULL);
}
-
- Size = LibPcdGetExSize (Guid, TokenNumber);
- if (*SizeOfBuffer > Size) {
- *SizeOfBuffer = Size;
+ InputSizeOfBuffer = *SizeOfBuffer;
+ Status = GetPiPcdProtocol()->SetPtr (Guid, TokenNumber, SizeOfBuffer, Buffer);
+ if (EFI_ERROR (Status) && (*SizeOfBuffer < InputSizeOfBuffer)) {
return NULL;
}
- Status = mPcd->SetPtrEx (Guid, TokenNumber, *SizeOfBuffer, Buffer);
-
- ASSERT_EFI_ERROR (Status);
-
return Buffer;
}
/**
- Sets the Boolean value for the token specified by TokenNumber and
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the Boolean value for the token specified by TokenNumber and
Guid to the value specified by Value. Value is returned.
+
If Guid 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 Boolean value to set.
- @retval Boolean Return the value been set.
+ @param[in] Guid The 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 Boolean value to set.
+
+ @return Return the value that was set.
**/
BOOLEAN
@@ -775,33 +865,364 @@ LibPcdSetExBool (
IN BOOLEAN Value
)
{
- EFI_STATUS Status;
+ ASSERT (Guid != NULL);
+
+ GetPiPcdProtocol()->SetBool (Guid, TokenNumber, Value);
+
+ return Value;
+}
+#endif
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 8-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 8-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSet8S (
+ IN UINTN TokenNumber,
+ IN UINT8 Value
+ )
+{
+ return GetPcdProtocol()->Set8 (TokenNumber, Value);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 16-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 16-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSet16S (
+ IN UINTN TokenNumber,
+ IN UINT16 Value
+ )
+{
+ return GetPcdProtocol()->Set16 (TokenNumber, Value);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 32-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 32-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSet32S (
+ IN UINTN TokenNumber,
+ IN UINT32 Value
+ )
+{
+ return GetPcdProtocol()->Set32 (TokenNumber, Value);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 64-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The 64-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSet64S (
+ IN UINTN TokenNumber,
+ IN UINT64 Value
+ )
+{
+ return GetPcdProtocol()->Set64 (TokenNumber, Value);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets a buffer for the token specified by TokenNumber to the value specified
+ by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size
+ support by TokenNumber, then set SizeOfBuffer to the maximum size supported by
+ TokenNumber and return EFI_INVALID_PARAMETER to indicate that the set operation
+ was not actually performed.
+
+ If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to the
+ maximum size supported by TokenName and EFI_INVALID_PARAMETER must be returned.
+
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 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] Buffer A pointer to the buffer to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetPtrS (
+ IN UINTN TokenNumber,
+ IN OUT UINTN *SizeOfBuffer,
+ IN CONST VOID *Buffer
+ )
+{
+ ASSERT (SizeOfBuffer != NULL);
+
+ if (*SizeOfBuffer > 0) {
+ ASSERT (Buffer != NULL);
+ }
+
+ return GetPcdProtocol()->SetPtr (TokenNumber, SizeOfBuffer, (VOID *) Buffer);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the boolean value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ @param[in] TokenNumber The PCD token number to set a current value for.
+ @param[in] Value The boolean value to set.
+
+ @return The status of the set operation.
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetBoolS (
+ IN UINTN TokenNumber,
+ IN BOOLEAN Value
+ )
+{
+ return GetPcdProtocol()->SetBool (TokenNumber, Value);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 8-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The 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.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetEx8S (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT8 Value
+ )
+{
ASSERT (Guid != NULL);
- Status = mPcd->SetBoolEx (Guid, TokenNumber, Value);
+ return GetPiPcdProtocol()->Set8 (Guid, TokenNumber, Value);
+}
- ASSERT_EFI_ERROR (Status);
+/**
+ This function provides a means by which to set a value for a given PCD token.
- return Value;
+ Sets the 16-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The 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 16-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetEx16S (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT16 Value
+ )
+{
+ ASSERT (Guid != NULL);
+
+ return GetPiPcdProtocol()->Set16 (Guid, TokenNumber, Value);
}
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 32-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The 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 32-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetEx32S (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT32 Value
+ )
+{
+ ASSERT (Guid != NULL);
+ return GetPiPcdProtocol()->Set32 (Guid, TokenNumber, Value);
+}
/**
- When the token specified by TokenNumber and Guid is set,
- then notification function specified by NotificationFunction is called.
- If Guid is NULL, then the default token space is used.
- If NotificationFunction is NULL, then ASSERT().
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the 64-bit value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The 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 64-bit value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetEx64S (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ IN UINT64 Value
+ )
+{
+ ASSERT (Guid != NULL);
- @param[in] Guid Pointer to a 128-bit unique value that designates which
- namespace to set a value from. If NULL, then the default
- token space is used.
- @param[in] TokenNumber The PCD token number to monitor.
- @param[in] NotificationFunction The function to call when the token
- specified by Guid and TokenNumber is set.
+ return GetPiPcdProtocol()->Set64 (Guid, TokenNumber, Value);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets a buffer for the token specified by TokenNumber to the value specified by
+ Buffer and SizeOfBuffer. If SizeOfBuffer is greater than the maximum size
+ support by TokenNumber, then set SizeOfBuffer to the maximum size supported by
+ TokenNumber and return EFI_INVALID_PARAMETER to indicate that the set operation
+ was not actually performed.
- @retval VOID
+ If Guid is NULL, then ASSERT().
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 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, out] SizeOfBuffer The size, in bytes, of Buffer.
+ @param[in] Buffer A pointer to the buffer to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetExPtrS (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ IN OUT UINTN *SizeOfBuffer,
+ IN VOID *Buffer
+ )
+{
+ ASSERT (Guid != NULL);
+
+ ASSERT (SizeOfBuffer != NULL);
+
+ if (*SizeOfBuffer > 0) {
+ ASSERT (Buffer != NULL);
+ }
+
+ return GetPiPcdProtocol()->SetPtr (Guid, TokenNumber, SizeOfBuffer, Buffer);
+}
+
+/**
+ This function provides a means by which to set a value for a given PCD token.
+
+ Sets the boolean value for the token specified by TokenNumber
+ to the value specified by Value.
+
+ If Guid is NULL, then ASSERT().
+
+ @param[in] Guid The 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 boolean value to set.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPcdSetExBoolS (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ IN BOOLEAN Value
+ )
+{
+ ASSERT (Guid != NULL);
+
+ return GetPiPcdProtocol()->SetBool (Guid, TokenNumber, Value);
+}
+
+/**
+ Set up a notification function that is called when a specified token is set.
+
+ When the token specified by TokenNumber and Guid is set,
+ then notification function specified by NotificationFunction is called.
+ If Guid is NULL, then the default token space is used.
+ If NotificationFunction is NULL, then ASSERT().
+
+ @param[in] Guid The pointer to a 128-bit unique value that designates which
+ namespace to set a value from. If NULL, then the default
+ token space is used.
+ @param[in] TokenNumber The PCD token number to monitor.
+ @param[in] NotificationFunction The function to call when the token
+ specified by Guid and TokenNumber is set.
**/
VOID
@@ -816,8 +1237,7 @@ LibPcdCallbackOnSet (
ASSERT (NotificationFunction != NULL);
- Status = mPcd->CallbackOnSet (TokenNumber, Guid, NotificationFunction);
-
+ Status = GetPiPcdProtocol()->CallbackOnSet (Guid, TokenNumber, (EFI_PCD_PROTOCOL_CALLBACK) NotificationFunction);
ASSERT_EFI_ERROR (Status);
return;
@@ -827,14 +1247,16 @@ LibPcdCallbackOnSet (
/**
Disable a notification function that was established with LibPcdCallbackonSet().
+
+ Disable a notification function that was previously established with LibPcdCallbackOnSet().
If NotificationFunction is NULL, then ASSERT().
+ If LibPcdCallbackOnSet() was not previously called with Guid, TokenNumber,
+ and NotificationFunction, then ASSERT().
- @param[in] Guid Specify the GUID token space.
- @param[in] TokenNumber Specify the token number.
+ @param[in] Guid Specify the GUID token space.
+ @param[in] TokenNumber Specify the token number.
@param[in] NotificationFunction The callback function to be unregistered.
- @retval VOID
-
**/
VOID
EFIAPI
@@ -847,9 +1269,8 @@ LibPcdCancelCallback (
EFI_STATUS Status;
ASSERT (NotificationFunction != NULL);
-
- Status = mPcd->CancelCallback (TokenNumber, Guid, NotificationFunction);
+ Status = GetPiPcdProtocol()->CancelCallback (Guid, TokenNumber, (EFI_PCD_PROTOCOL_CALLBACK) NotificationFunction);
ASSERT_EFI_ERROR (Status);
return;
@@ -858,33 +1279,35 @@ LibPcdCancelCallback (
/**
- Retrieves the next PCD token number from the token space specified by Guid.
- If Guid is NULL, then the default token space is used. If TokenNumber is 0,
- then the first token number is returned. Otherwise, the token number that
- follows TokenNumber in the token space is returned. If TokenNumber is the last
- token number in the token space, then 0 is returned. If TokenNumber is not 0 and
- is not in the token space specified by Guid, then ASSERT().
+ Retrieves the next token in a token space.
+
+ Retrieves the next PCD token number from the token space specified by Guid.
+ If Guid is NULL, then the default token space is used. If TokenNumber is 0,
+ then the first token number is returned. Otherwise, the token number that
+ follows TokenNumber in the token space is returned. If TokenNumber is the last
+ token number in the token space, then 0 is returned.
- @param[in] Pointer to a 128-bit unique value that designates which namespace
- to set a value from. If NULL, then the default token space is used.
- @param[in] The previous PCD token number. If 0, then retrieves the first PCD
- token number.
+ If TokenNumber is not 0 and is not in the token space specified by Guid, then ASSERT().
- @retval UINTN The next valid token number.
+ @param[in] Guid The pointer to a 128-bit unique value that designates which namespace
+ to set a value from. If NULL, then the default token space is used.
+ @param[in] TokenNumber The previous PCD token number. If 0, then retrieves the first PCD
+ token number.
+
+ @return The next valid token number.
**/
-UINTN
+UINTN
EFIAPI
LibPcdGetNextToken (
- IN CONST GUID *Guid, OPTIONAL
- IN UINTN TokenNumber
+ IN CONST GUID *Guid, OPTIONAL
+ IN UINTN TokenNumber
)
{
- EFI_STATUS Status;
-
- Status = mPcd->GetNextToken (Guid, &TokenNumber);
+ EFI_STATUS Status;
- ASSERT_EFI_ERROR (Status);
+ Status = GetPiPcdProtocol()->GetNextToken (Guid, &TokenNumber);
+ ASSERT (!EFI_ERROR (Status) || TokenNumber == 0);
return TokenNumber;
}
@@ -892,34 +1315,306 @@ LibPcdGetNextToken (
/**
- 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().
+ Used to retrieve the list of available PCD token space GUIDs.
+ Returns the PCD token space GUID that follows TokenSpaceGuid in the list of token spaces
+ in the platform.
+ If TokenSpaceGuid is NULL, then a pointer to the first PCD token spaces returned.
+ If TokenSpaceGuid is the last PCD token space GUID in the list, then NULL is returned.
-
- @param[in] Pointer to a 128-bit unique value that designates from which namespace
- to start the search.
+ @param TokenSpaceGuid The pointer to the a PCD token space GUID.
- @retval CONST GUID * The next valid token namespace.
+ @return The next valid token namespace.
**/
-GUID *
+GUID *
EFIAPI
LibPcdGetNextTokenSpace (
- IN CONST GUID *Guid
+ IN CONST GUID *TokenSpaceGuid
+ )
+{
+ GetPiPcdProtocol()->GetNextTokenSpace (&TokenSpaceGuid);
+
+ return (GUID *)TokenSpaceGuid;
+}
+
+
+/**
+ Sets a value of a patchable PCD entry that is type pointer.
+
+ Sets the PCD entry specified by PatchVariable to the value specified by Buffer
+ and SizeOfBuffer. Buffer is returned. If SizeOfBuffer is greater than
+ MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return
+ NULL to indicate that the set operation was not actually performed.
+ If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
+ MaximumDatumSize and NULL must be returned.
+
+ If PatchVariable is NULL, then ASSERT().
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
+
+ @param[out] PatchVariable A pointer to the global variable in a module that is
+ the target of the set operation.
+ @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable.
+ @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer.
+ @param[in] Buffer A pointer to the buffer to used to set the target variable.
+
+ @return Return the pointer to the buffer been set.
+
+**/
+VOID *
+EFIAPI
+LibPatchPcdSetPtr (
+ OUT VOID *PatchVariable,
+ IN UINTN MaximumDatumSize,
+ IN OUT UINTN *SizeOfBuffer,
+ IN CONST VOID *Buffer
+ )
+{
+ ASSERT (PatchVariable != NULL);
+ ASSERT (SizeOfBuffer != NULL);
+
+ if (*SizeOfBuffer > 0) {
+ ASSERT (Buffer != NULL);
+ }
+
+ if ((*SizeOfBuffer > MaximumDatumSize) ||
+ (*SizeOfBuffer == MAX_ADDRESS)) {
+ *SizeOfBuffer = MaximumDatumSize;
+ return NULL;
+ }
+
+ CopyMem (PatchVariable, Buffer, *SizeOfBuffer);
+
+ return (VOID *) Buffer;
+}
+
+/**
+ Sets a value of a patchable PCD entry that is type pointer.
+
+ Sets the PCD entry specified by PatchVariable to the value specified
+ by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize,
+ then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER
+ to indicate that the set operation was not actually performed.
+ If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
+ MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned.
+
+ If PatchVariable is NULL, then ASSERT().
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
+
+ @param[out] PatchVariable A pointer to the global variable in a module that is
+ the target of the set operation.
+ @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable.
+ @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer.
+ @param[in] Buffer A pointer to the buffer to used to set the target variable.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPatchPcdSetPtrS (
+ OUT VOID *PatchVariable,
+ IN UINTN MaximumDatumSize,
+ IN OUT UINTN *SizeOfBuffer,
+ IN CONST VOID *Buffer
+ )
+{
+ ASSERT (PatchVariable != NULL);
+ ASSERT (SizeOfBuffer != NULL);
+
+ if (*SizeOfBuffer > 0) {
+ ASSERT (Buffer != NULL);
+ }
+
+ if ((*SizeOfBuffer > MaximumDatumSize) ||
+ (*SizeOfBuffer == MAX_ADDRESS)) {
+ *SizeOfBuffer = MaximumDatumSize;
+ return RETURN_INVALID_PARAMETER;
+ }
+
+ CopyMem (PatchVariable, Buffer, *SizeOfBuffer);
+
+ return RETURN_SUCCESS;
+}
+
+
+/**
+ Sets a value and size of a patchable PCD entry that is type pointer.
+
+ Sets the PCD entry specified by PatchVariable to the value specified by Buffer
+ and SizeOfBuffer. Buffer is returned. If SizeOfBuffer is greater than
+ MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return
+ NULL to indicate that the set operation was not actually performed.
+ If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
+ MaximumDatumSize and NULL must be returned.
+
+ If PatchVariable is NULL, then ASSERT().
+ If SizeOfPatchVariable is NULL, then ASSERT().
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
+
+ @param[out] PatchVariable A pointer to the global variable in a module that is
+ the target of the set operation.
+ @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable.
+ @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable.
+ @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer.
+ @param[in] Buffer A pointer to the buffer to used to set the target variable.
+
+ @return Return the pointer to the buffer been set.
+
+**/
+VOID *
+EFIAPI
+LibPatchPcdSetPtrAndSize (
+ OUT VOID *PatchVariable,
+ OUT UINTN *SizeOfPatchVariable,
+ IN UINTN MaximumDatumSize,
+ IN OUT UINTN *SizeOfBuffer,
+ IN CONST VOID *Buffer
+ )
+{
+ ASSERT (PatchVariable != NULL);
+ ASSERT (SizeOfPatchVariable != NULL);
+ ASSERT (SizeOfBuffer != NULL);
+
+ if (*SizeOfBuffer > 0) {
+ ASSERT (Buffer != NULL);
+ }
+
+ if ((*SizeOfBuffer > MaximumDatumSize) ||
+ (*SizeOfBuffer == MAX_ADDRESS)) {
+ *SizeOfBuffer = MaximumDatumSize;
+ return NULL;
+ }
+
+ CopyMem (PatchVariable, Buffer, *SizeOfBuffer);
+ *SizeOfPatchVariable = *SizeOfBuffer;
+
+ return (VOID *) Buffer;
+}
+
+/**
+ Sets a value and size of a patchable PCD entry that is type pointer.
+
+ Sets the PCD entry specified by PatchVariable to the value specified
+ by Buffer and SizeOfBuffer. If SizeOfBuffer is greater than MaximumDatumSize,
+ then set SizeOfBuffer to MaximumDatumSize and return RETURN_INVALID_PARAMETER
+ to indicate that the set operation was not actually performed.
+ If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to
+ MaximumDatumSize and RETURN_INVALID_PARAMETER must be returned.
+
+ If PatchVariable is NULL, then ASSERT().
+ If SizeOfPatchVariable is NULL, then ASSERT().
+ If SizeOfBuffer is NULL, then ASSERT().
+ If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().
+
+ @param[out] PatchVariable A pointer to the global variable in a module that is
+ the target of the set operation.
+ @param[out] SizeOfPatchVariable A pointer to the size, in bytes, of PatchVariable.
+ @param[in] MaximumDatumSize The maximum size allowed for the PCD entry specified by PatchVariable.
+ @param[in, out] SizeOfBuffer A pointer to the size, in bytes, of Buffer.
+ @param[in] Buffer A pointer to the buffer to used to set the target variable.
+
+ @return The status of the set operation.
+
+**/
+RETURN_STATUS
+EFIAPI
+LibPatchPcdSetPtrAndSizeS (
+ OUT VOID *PatchVariable,
+ OUT UINTN *SizeOfPatchVariable,
+ IN UINTN MaximumDatumSize,
+ IN OUT UINTN *SizeOfBuffer,
+ IN CONST VOID *Buffer
+ )
+{
+ ASSERT (PatchVariable != NULL);
+ ASSERT (SizeOfPatchVariable != NULL);
+ ASSERT (SizeOfBuffer != NULL);
+
+ if (*SizeOfBuffer > 0) {
+ ASSERT (Buffer != NULL);
+ }
+
+ if ((*SizeOfBuffer > MaximumDatumSize) ||
+ (*SizeOfBuffer == MAX_ADDRESS)) {
+ *SizeOfBuffer = MaximumDatumSize;
+ return RETURN_INVALID_PARAMETER;
+ }
+
+ CopyMem (PatchVariable, Buffer, *SizeOfBuffer);
+ *SizeOfPatchVariable = *SizeOfBuffer;
+
+ return RETURN_SUCCESS;
+}
+
+/**
+ Retrieve additional information associated with a PCD token.
+
+ This includes information such as the type of value the TokenNumber is associated with as well as possible
+ human readable name that is associated with the token.
+
+ If TokenNumber is not in the default token space specified, then ASSERT().
+
+ @param[in] TokenNumber The PCD token number.
+ @param[out] PcdInfo The returned information associated with the requested TokenNumber.
+ The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
+**/
+VOID
+EFIAPI
+LibPcdGetInfo (
+ IN UINTN TokenNumber,
+ OUT PCD_INFO *PcdInfo
)
{
EFI_STATUS Status;
- Status = mPcd->GetNextTokenSpace (&Guid);
+ Status = GetPcdInfoProtocolPointer()->GetInfo (TokenNumber, (EFI_PCD_INFO *) PcdInfo);
+ ASSERT_EFI_ERROR (Status);
+}
+
+/**
+ Retrieve additional information associated with a PCD token.
+
+ This includes information such as the type of value the TokenNumber is associated with as well as possible
+ human readable name that is associated with the token.
+
+ If TokenNumber is not in the token space specified by Guid, then ASSERT().
+
+ @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[out] PcdInfo The returned information associated with the requested TokenNumber.
+ The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.
+**/
+VOID
+EFIAPI
+LibPcdGetInfoEx (
+ IN CONST GUID *Guid,
+ IN UINTN TokenNumber,
+ OUT PCD_INFO *PcdInfo
+ )
+{
+ EFI_STATUS Status;
+ Status = GetPiPcdInfoProtocolPointer()->GetInfo (Guid, TokenNumber, (EFI_PCD_INFO *) PcdInfo);
ASSERT_EFI_ERROR (Status);
+}
- return (GUID *) Guid;
+/**
+ Retrieve the currently set SKU Id.
+
+ @return The currently set SKU Id. If the platform has not set at a SKU Id, then the
+ default SKU Id value of 0 is returned. If the platform has set a SKU Id, then the currently set SKU
+ Id is returned.
+**/
+UINTN
+EFIAPI
+LibPcdGetSku (
+ VOID
+ )
+{
+ return GetPiPcdInfoProtocolPointer()->GetSku ();
}