]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiPcdLib/PeiPcdLib.c
synchronize the MdePkg/Include/Library/PcdLib.h and the MDE_Library_Spec.Add the...
[mirror_edk2.git] / MdePkg / Library / PeiPcdLib / PeiPcdLib.c
index 8ef52055930cde23973a96194943b0c1faefec5b..2766817b4307cdd0a611fca19d146d864b336387 100644 (file)
@@ -11,64 +11,63 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
 \r
 \r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
 \r
 \r
-Module Name: PeiPcdLib.c\r
-\r
 **/\r
 \r
 \r
 \r
 **/\r
 \r
 \r
 \r
+\r
+#include <PiPei.h>\r
+\r
+#include <Ppi/Pcd.h>\r
+\r
+#include <Library/PeiServicesLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+\r
 /**\r
 /**\r
-  The constructor function retrieve the PCD_PPI pointer.\r
+  Retrieve the PCD_PPI pointer.\r
 \r
 \r
-  @param[in] VOID\r
+  This function is to locate PCD_PPI PPI via PeiService. \r
+  If fail to locate PCD_PPI, then ASSERT_EFI_ERROR().\r
   \r
   @retval PCD_PPI * The pointer to the PCD_PPI.\r
 \r
 **/\r
 PCD_PPI  *\r
   \r
   @retval PCD_PPI * The pointer to the PCD_PPI.\r
 \r
 **/\r
 PCD_PPI  *\r
-GetPcdPpiPtr (\r
+GetPcdPpiPointer (\r
   VOID\r
   ) \r
 {\r
   EFI_STATUS        Status;\r
   PCD_PPI           *PcdPpi;\r
   VOID\r
   ) \r
 {\r
   EFI_STATUS        Status;\r
   PCD_PPI           *PcdPpi;\r
-  EFI_PEI_SERVICES  **PeiServices;\r
-\r
-\r
-  PeiServices = GetPeiServicesTablePointer ();\r
-\r
-  Status = (**PeiServices).LocatePpi (\r
-                             PeiServices,\r
-                             &gPcdPpiGuid,\r
-                             0,\r
-                             NULL,\r
-                             (VOID **)&PcdPpi\r
-                             );\r
-\r
+  \r
+  Status = PeiServicesLocatePpi (&gPcdPpiGuid, 0, NULL, (VOID **)&PcdPpi);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   return PcdPpi;\r
 }\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
   return PcdPpi;\r
 }\r
 \r
-\r
-\r
 /**\r
   Sets the current SKU in the PCD database to the value specified by SkuId.  SkuId is returned.\r
 /**\r
   Sets the current SKU in the PCD database to the value specified by SkuId.  SkuId is returned.\r
+  If SkuId not less than PCD_MAX_SKU_ID, then ASSERT().\r
+  \r
+  @param[in]  SkuId     System sku id. The SKU value that will be used when the PCD service will retrieve and \r
+                        set values.\r
 \r
 \r
-  @param[in]  SkuId The SKU value that will be used when the PCD service will retrieve and \r
-              set values associated with a PCD token.\r
-\r
-  @retval SKU_ID Return the SKU ID that just be set.\r
+  @return Return the SKU ID that just be set.\r
 \r
 **/\r
 \r
 **/\r
-SKU_ID\r
+UINTN\r
 EFIAPI\r
 LibPcdSetSku (\r
 EFIAPI\r
 LibPcdSetSku (\r
-  IN SKU_ID  SkuId\r
+  IN UINTN  SkuId\r
   )\r
 {\r
 \r
   )\r
 {\r
 \r
-  GetPcdPpiPtr()->SetSku (SkuId);;\r
+  ASSERT (SkuId < PCD_MAX_SKU_ID);\r
+\r
+  GetPcdPpiPointer()->SetSku (SkuId);\r
 \r
   return SkuId;\r
 }\r
 \r
   return SkuId;\r
 }\r
@@ -78,22 +77,18 @@ LibPcdSetSku (
 /**\r
   Returns the 8-bit value for the token specified by TokenNumber. \r
 \r
 /**\r
   Returns the 8-bit value for the token specified by TokenNumber. \r
 \r
-  @param[in]  The PCD token number to retrieve a current value for.\r
+  @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
-  @retval UINT8 Returns the 8-bit value for the token specified by TokenNumber. \r
+  @return Returns the 8-bit value for the token specified by TokenNumber. \r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdGet8 (\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdGet8 (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->Get8 (TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get8 (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -101,22 +96,18 @@ LibPcdGet8 (
 /**\r
   Returns the 16-bit value for the token specified by TokenNumber. \r
 \r
 /**\r
   Returns the 16-bit value for the token specified by TokenNumber. \r
 \r
-  @param[in]  The PCD token number to retrieve a current value for.\r
+  @param[in] TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
-  @retval UINT16 Returns the 16-bit value for the token specified by TokenNumber. \r
+  @return Returns the 16-bit value for the token specified by TokenNumber. \r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdGet16 (\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdGet16 (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI  *PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->Get16 (TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get16 (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -126,20 +117,16 @@ LibPcdGet16 (
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINT32 Returns the 32-bit value for the token specified by TokenNumber.\r
+  @return Returns the 32-bit value for the token specified by TokenNumber.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdGet32 (\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdGet32 (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->Get32 (TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get32 (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -149,20 +136,16 @@ LibPcdGet32 (
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINT64 Returns the 64-bit value for the token specified by TokenNumber.\r
+  @return Returns the 64-bit value for the token specified by TokenNumber.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdGet64 (\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdGet64 (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->Get64 (TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get64 (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -172,20 +155,16 @@ LibPcdGet64 (
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval VOID* Returns the pointer to the token specified by TokenNumber.\r
+  @return Returns the pointer to the token specified by TokenNumber.\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdGetPtr (\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdGetPtr (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->GetPtr (TokenNumber);\r
+  return (GetPcdPpiPointer ())->GetPtr (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -195,20 +174,16 @@ LibPcdGetPtr (
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval BOOLEAN Returns the Boolean value of the token specified by TokenNumber. \r
+  @return Returns the Boolean value of the token specified by TokenNumber. \r
 \r
 **/\r
 BOOLEAN \r
 EFIAPI\r
 LibPcdGetBool (\r
 \r
 **/\r
 BOOLEAN \r
 EFIAPI\r
 LibPcdGetBool (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->GetBool (TokenNumber);\r
+  return (GetPcdPpiPointer ())->GetBool (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -218,20 +193,16 @@ LibPcdGetBool (
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
 \r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINTN Returns the size of the token specified by TokenNumber. \r
+  @return Returns the size of the token specified by TokenNumber. \r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 LibPcdGetSize (\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 LibPcdGetSize (\r
-  IN PCD_TOKEN_NUMBER             TokenNumber\r
+  IN UINTN                        TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->GetSize (TokenNumber);\r
+  return (GetPcdPpiPointer ())->GetSize (TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -244,21 +215,19 @@ LibPcdGetSize (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINT8 Return the UINT8.\r
+  @return Return the UINT8.\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdGetEx8 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdGetEx8 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  return PcdPpi->Get8Ex (Guid, TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get8Ex (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -271,21 +240,20 @@ LibPcdGetEx8 (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINT16 Return the UINT16.\r
+  @return Return the UINT16.\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdGetEx16 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdGetEx16 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  return PcdPpi->Get16Ex (Guid, TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get16Ex (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -298,21 +266,19 @@ LibPcdGetEx16 (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINT32 Return the UINT32.\r
+  @return Return the UINT32.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdGetEx32 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdGetEx32 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->Get32Ex (Guid, TokenNumber);\r
+  return (GetPcdPpiPointer ())->Get32Ex (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -326,21 +292,18 @@ LibPcdGetEx32 (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINT64 Return the UINT64.\r
+  @return Return the UINT64.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdGetEx64 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdGetEx64 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->Get64Ex (Guid, TokenNumber);\r
+  ASSERT (Guid != NULL);\r
+  return (GetPcdPpiPointer ())->Get64Ex (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -353,21 +316,19 @@ LibPcdGetEx64 (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval VOID* Return the VOID* pointer.\r
+  @return Return the VOID* pointer.\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdGetExPtr (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdGetExPtr (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  return PcdPpi->GetPtrEx (Guid, TokenNumber);\r
+  return (GetPcdPpiPointer ())->GetPtrEx (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -380,21 +341,18 @@ LibPcdGetExPtr (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval BOOLEAN Return the BOOLEAN.\r
+  @return Return the BOOLEAN.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
 LibPcdGetExBool (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
 LibPcdGetExBool (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->GetBoolEx (Guid, TokenNumber);\r
+  ASSERT (Guid != NULL);\r
+  return (GetPcdPpiPointer ())->GetBoolEx (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -407,21 +365,18 @@ LibPcdGetExBool (
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
               which namespace to retrieve a value from.\r
   @param[in]  TokenNumber The PCD token number to retrieve a current value for.\r
 \r
-  @retval UINTN Return the size.\r
+  @return Return the size.\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 LibPcdGetExSize (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINTN\r
 EFIAPI\r
 LibPcdGetExSize (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber\r
+  IN UINTN             TokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-  return PcdPpi->GetSizeEx (Guid, TokenNumber);\r
+  ASSERT (Guid != NULL);\r
+  return (GetPcdPpiPointer ())->GetSizeEx (Guid, TokenNumber);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -429,27 +384,24 @@ LibPcdGetExSize (
 /**\r
   Sets the 8-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
 /**\r
   Sets the 8-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 8-bit value to set.\r
 \r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 8-bit value to set.\r
 \r
-  @retval UINT8 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdSet8 (\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdSet8 (\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT8             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT8             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
 \r
 \r
-  Status = PcdPpi->Set8 (TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set8 (TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
   \r
 \r
   ASSERT_EFI_ERROR (Status);\r
   \r
@@ -461,27 +413,24 @@ LibPcdSet8 (
 /**\r
   Sets the 16-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
 /**\r
   Sets the 16-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 16-bit value to set.\r
 \r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 16-bit value to set.\r
 \r
-  @retval UINT16 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdSet16 (\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdSet16 (\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT16            Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT16            Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-\r
-  Status = PcdPpi->Set16 (TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set16 (TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
   \r
 \r
   ASSERT_EFI_ERROR (Status);\r
   \r
@@ -493,26 +442,24 @@ LibPcdSet16 (
 /**\r
   Sets the 32-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
 /**\r
   Sets the 32-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 32-bit value to set.\r
 \r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 32-bit value to set.\r
 \r
-  @retval UINT32 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdSet32 (\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdSet32 (\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT32             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT32             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
 \r
 \r
-  Status = PcdPpi->Set32 (TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set32 (TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -524,27 +471,24 @@ LibPcdSet32 (
 /**\r
   Sets the 64-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
 /**\r
   Sets the 64-bit value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 64-bit value to set.\r
 \r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 64-bit value to set.\r
 \r
-  @retval UINT64 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdSet64 (\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdSet64 (\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT64             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT64             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-\r
-  Status = PcdPpi->Set64 (TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set64 (TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -555,32 +499,47 @@ LibPcdSet64 (
 \r
 /**\r
   Sets a buffer for the token specified by TokenNumber to \r
 \r
 /**\r
   Sets a buffer for the token specified by TokenNumber to \r
-  the value specified by Value. Value is returned.\r
-  If Value is NULL, then ASSERT().\r
+  the value specified by Buffer and SizeOfBuffer.  Buffer to\r
+  be set is returned. The content of the buffer could be \r
+  overwritten if a Callback on SET is registered with this\r
+  TokenNumber.\r
   \r
   \r
-  @param[in]  TokenNumber The PCD token number to set a current value for.\r
-  @param[in]  Value A pointer to the buffer to set.\r
+  If SizeOfBuffer is greater than the maximum \r
+  size support by TokenNumber, then set SizeOfBuffer to the \r
+  maximum size supported by TokenNumber and return NULL to \r
+  indicate that the set operation was not actually performed. \r
+  \r
+  If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().\r
+  \r
+  @param[in]        TokenNumber     The PCD token number to set a current value for.\r
+  @param[in, out]   SizeOfBuffer    The size, in bytes, of Buffer.\r
+                                    In out, returns actual size of buffer is set.\r
+  @param[in]        Buffer          A pointer to the buffer to set.\r
 \r
 \r
-  @retval VOID* Return the pointer for the buffer been set.\r
+  @return Return the pointer for the buffer been set.\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdSetPtr (\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdSetPtr (\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
-  IN UINTN             SizeOfBuffer,\r
-  IN VOID              *Buffer\r
+  IN       UINTN             TokenNumber,\r
+  IN OUT   UINTN             *SizeOfBuffer,\r
+  IN       VOID              *Buffer\r
   )\r
 {\r
   EFI_STATUS Status;\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
 \r
 \r
+  ASSERT (SizeOfBuffer != NULL);\r
 \r
 \r
-  Status = PcdPpi->SetPtr (TokenNumber, SizeOfBuffer, Buffer);\r
+  if (*SizeOfBuffer > 0) {\r
+    ASSERT (Buffer != NULL);\r
+  }\r
+  \r
+  Status = (GetPcdPpiPointer ())->SetPtr (TokenNumber, SizeOfBuffer, Buffer);\r
 \r
 \r
-  ASSERT_EFI_ERROR (Status);\r
+  if (EFI_ERROR (Status)) {\r
+    return NULL;\r
+  }\r
 \r
   return Buffer;\r
 }\r
 \r
   return Buffer;\r
 }\r
@@ -590,27 +549,24 @@ LibPcdSetPtr (
 /**\r
   Sets the Boolean value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
 /**\r
   Sets the Boolean value for the token specified by TokenNumber \r
   to the value specified by Value.  Value is returned.\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The boolean value to set.\r
 \r
   \r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The boolean value to set.\r
 \r
-  @retval BOOLEAN Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
 LibPcdSetBool (\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
 LibPcdSetBool (\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN BOOLEAN           Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN BOOLEAN           Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-\r
-  Status = PcdPpi->SetBool (TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->SetBool (TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -623,30 +579,29 @@ LibPcdSetBool (
   Sets the 8-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
   Sets the 8-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 8-bit value to set.\r
 \r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 8-bit value to set.\r
 \r
-  @retval UINT8 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdSetEx8 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 LibPcdSetEx8 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT8             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT8             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-\r
-  Status = PcdPpi->Set8Ex (Guid, TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set8Ex (Guid, TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -659,30 +614,27 @@ LibPcdSetEx8 (
   Sets the 16-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
   Sets the 16-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 16-bit value to set.\r
 \r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 16-bit value to set.\r
 \r
-  @retval UINT8 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdSetEx16 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 LibPcdSetEx16 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT16            Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT16            Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-\r
-  Status = PcdPpi->Set16Ex (Guid, TokenNumber, Value);\r
+  ASSERT (Guid != NULL);\r
+  Status = (GetPcdPpiPointer ())->Set16Ex (Guid, TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -695,30 +647,29 @@ LibPcdSetEx16 (
   Sets the 32-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
   Sets the 32-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 32-bit value to set.\r
 \r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 32-bit value to set.\r
 \r
-  @retval UINT32 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdSetEx32 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 LibPcdSetEx32 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT32             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT32             Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
 \r
 \r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  Status = PcdPpi->Set32Ex (Guid, TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set32Ex (Guid, TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -731,30 +682,28 @@ LibPcdSetEx32 (
   Sets the 64-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
   Sets the 64-bit value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 64-bit value to set.\r
 \r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The 64-bit value to set.\r
 \r
-  @retval UINT64 Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdSetEx64 (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 LibPcdSetEx64 (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN UINT64            Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN UINT64            Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-\r
-  Status = PcdPpi->Set64Ex (Guid, TokenNumber, Value);\r
+  Status = (GetPcdPpiPointer ())->Set64Ex (Guid, TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -764,36 +713,45 @@ LibPcdSetEx64 (
 \r
 \r
 /**\r
 \r
 \r
 /**\r
-  Sets a buffer for the token specified by TokenNumber and \r
-  Guid to the value specified by Value. Value is returned.\r
-  If Guid is NULL, then ASSERT().\r
-  If Value is NULL, then ASSERT().\r
+  Sets a buffer for the token specified by TokenNumber to the value specified by \r
+  Buffer and SizeOfBuffer.  Buffer is returned.  If SizeOfBuffer is greater than \r
+  the maximum size support by TokenNumber, then set SizeOfBuffer to the maximum size \r
+  supported by TokenNumber and return NULL to indicate that the set operation \r
+  was not actually performed. \r
+  \r
+  If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
-  @param[in]  Value The 8-bit value to set.\r
+  @param[in, out] SizeOfBuffer The size, in bytes, of Buffer.\r
+                  In out, returns actual size of buffer is set.\r
+  @param[in]  Buffer A pointer to the buffer to set.\r
 \r
 \r
-  @retval VOID * Return the value been set.\r
+  @return Return the pinter to the buffer been set.\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdSetExPtr (\r
 \r
 **/\r
 VOID *\r
 EFIAPI\r
 LibPcdSetExPtr (\r
-  IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
-  IN UINTN             SizeOfBuffer,\r
-  IN VOID              *Buffer\r
+  IN      CONST GUID        *Guid,\r
+  IN      UINTN             TokenNumber,\r
+  IN OUT  UINTN             *SizeOfBuffer,\r
+  IN      VOID              *Buffer\r
   )\r
 {\r
   )\r
 {\r
-  EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
+  EFI_STATUS      Status;\r
+  ASSERT (SizeOfBuffer != NULL);\r
+  if (*SizeOfBuffer > 0) {\r
+    ASSERT (Buffer != NULL);\r
+  }\r
+  ASSERT (Guid != NULL);\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
+  Status = (GetPcdPpiPointer ())->SetPtrEx (Guid, TokenNumber, SizeOfBuffer, Buffer);\r
 \r
 \r
-  Status = PcdPpi->SetPtrEx (Guid, TokenNumber, SizeOfBuffer, Buffer);\r
-\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (EFI_ERROR (Status)) {\r
+    return NULL;\r
+  }\r
 \r
   return Buffer;\r
 }\r
 \r
   return Buffer;\r
 }\r
@@ -804,30 +762,28 @@ LibPcdSetExPtr (
   Sets the Boolean value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
   Sets the Boolean value for the token specified by TokenNumber and \r
   Guid to the value specified by Value. Value is returned.\r
   If Guid is NULL, then ASSERT().\r
+  If fail to set pcd value, then ASSERT_EFI_ERROR().\r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The Boolean value to set.\r
 \r
   \r
   @param[in]  Guid Pointer to a 128-bit unique value that \r
               designates which namespace to set a value from.\r
   @param[in]  TokenNumber The PCD token number to set a current value for.\r
   @param[in]  Value The Boolean value to set.\r
 \r
-  @retval Boolean Return the value been set.\r
+  @return Return the value been set.\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
 LibPcdSetExBool (\r
   IN CONST GUID        *Guid,\r
 \r
 **/\r
 BOOLEAN\r
 EFIAPI\r
 LibPcdSetExBool (\r
   IN CONST GUID        *Guid,\r
-  IN PCD_TOKEN_NUMBER  TokenNumber,\r
+  IN UINTN             TokenNumber,\r
   IN BOOLEAN           Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN BOOLEAN           Value\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
 \r
 \r
-  Status = PcdPpi->SetBoolEx (Guid, TokenNumber, Value);\r
+  ASSERT (Guid != NULL);\r
+  Status = (GetPcdPpiPointer ())->SetBoolEx (Guid, TokenNumber, Value);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -841,7 +797,7 @@ LibPcdSetExBool (
   then notification function specified by NotificationFunction is called.  \r
   If Guid is NULL, then the default token space is used. \r
   If NotificationFunction is NULL, then ASSERT().\r
   then notification function specified by NotificationFunction is called.  \r
   If Guid is NULL, then the default token space is used. \r
   If NotificationFunction is NULL, then ASSERT().\r
-\r
+  If fail to set callback, then ASSERT_EFI_ERROR().\r
   @param[in]  Guid Pointer to a 128-bit unique value that designates which \r
               namespace to set a value from.  If NULL, then the default \r
               token space is used.\r
   @param[in]  Guid Pointer to a 128-bit unique value that designates which \r
               namespace to set a value from.  If NULL, then the default \r
               token space is used.\r
@@ -849,24 +805,18 @@ LibPcdSetExBool (
   @param[in]  NotificationFunction The function to call when the token \r
               specified by Guid and TokenNumber is set.\r
 \r
   @param[in]  NotificationFunction The function to call when the token \r
               specified by Guid and TokenNumber is set.\r
 \r
-  @retval VOID\r
-\r
 **/\r
 VOID\r
 EFIAPI\r
 LibPcdCallbackOnSet (\r
   IN CONST GUID               *Guid,       OPTIONAL\r
 **/\r
 VOID\r
 EFIAPI\r
 LibPcdCallbackOnSet (\r
   IN CONST GUID               *Guid,       OPTIONAL\r
-  IN PCD_TOKEN_NUMBER         TokenNumber,\r
+  IN UINTN                    TokenNumber,\r
   IN PCD_CALLBACK             NotificationFunction\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN PCD_CALLBACK             NotificationFunction\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
-\r
-  PcdPpi = GetPcdPpiPtr ();\r
 \r
 \r
-\r
-  Status = PcdPpi->CallbackOnSet (TokenNumber, Guid, NotificationFunction);\r
+  Status = (GetPcdPpiPointer ())->CallbackOnSet (Guid, TokenNumber, NotificationFunction);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -878,29 +828,24 @@ LibPcdCallbackOnSet (
 /**\r
   Disable a notification function that was established with LibPcdCallbackonSet().\r
   If NotificationFunction is NULL, then ASSERT().\r
 /**\r
   Disable a notification function that was established with LibPcdCallbackonSet().\r
   If NotificationFunction is NULL, then ASSERT().\r
-\r
+  If fail to cancel callback, then ASSERT_EFI_ERROR().\r
+  \r
   @param[in]  Guid Specify the GUID token space.\r
   @param[in]  TokenNumber Specify the token number.\r
   @param[in]  NotificationFunction The callback function to be unregistered.\r
 \r
   @param[in]  Guid Specify the GUID token space.\r
   @param[in]  TokenNumber Specify the token number.\r
   @param[in]  NotificationFunction The callback function to be unregistered.\r
 \r
-  @retval VOID\r
-\r
 **/\r
 VOID\r
 EFIAPI\r
 LibPcdCancelCallback (\r
   IN CONST GUID               *Guid,       OPTIONAL\r
 **/\r
 VOID\r
 EFIAPI\r
 LibPcdCancelCallback (\r
   IN CONST GUID               *Guid,       OPTIONAL\r
-  IN PCD_TOKEN_NUMBER         TokenNumber,\r
+  IN UINTN                    TokenNumber,\r
   IN PCD_CALLBACK             NotificationFunction\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN PCD_CALLBACK             NotificationFunction\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
-\r
-\r
-  Status = PcdPpi->CancelCallback (TokenNumber, Guid, NotificationFunction);\r
+  Status = (GetPcdPpiPointer ())->CancelCallback (Guid, TokenNumber, NotificationFunction);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -916,31 +861,117 @@ LibPcdCancelCallback (
   follows TokenNumber in the token space is returned.  If TokenNumber is the last \r
   token number in the token space, then 0 is returned.  If TokenNumber is not 0 and \r
   is not in the token space specified by Guid, then ASSERT().\r
   follows TokenNumber in the token space is returned.  If TokenNumber is the last \r
   token number in the token space, then 0 is returned.  If TokenNumber is not 0 and \r
   is not in the token space specified by Guid, then ASSERT().\r
+  If fail to get token in given token space, then ASSERT_EFI_ERROR().\r
+  \r
+  @param[in]  Guid          Pointer to a 128-bit unique value that designates which namespace \r
+                            to set a value from.  If NULL, then the default token space is used.\r
+  @param[in]  TokenNumber   The previous PCD token number.  If 0, then retrieves the first PCD \r
+                            token number.\r
 \r
 \r
-  @param[in]  Pointer to a 128-bit unique value that designates which namespace \r
-              to set a value from.  If NULL, then the default token space is used.\r
-  @param[in]  The previous PCD token number.  If 0, then retrieves the first PCD \r
-              token number.\r
-\r
-  @retval PCD_TOKEN_NUMBER The next valid token number.\r
+  @return The next valid token number.\r
 \r
 **/\r
 \r
 **/\r
-PCD_TOKEN_NUMBER           \r
+UINTN                      \r
 EFIAPI\r
 LibPcdGetNextToken (\r
   IN CONST GUID             *Guid, OPTIONAL\r
 EFIAPI\r
 LibPcdGetNextToken (\r
   IN CONST GUID             *Guid, OPTIONAL\r
-  IN       PCD_TOKEN_NUMBER TokenNumber\r
+  IN       UINTN            TokenNumber\r
   )\r
 {\r
   EFI_STATUS Status;\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  PCD_PPI * PcdPpi;\r
 \r
 \r
-  PcdPpi = GetPcdPpiPtr ();\r
+  Status = (GetPcdPpiPointer ())->GetNextToken (Guid, &TokenNumber);\r
+\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return TokenNumber;\r
+}\r
+\r
+\r
+/**\r
+  Used to retrieve the list of available PCD token space GUIDs.\r
+  \r
+  Retrieves the next PCD token space from a token space specified by Guid.\r
+  Guid of NULL is reserved to mark the default local token namespace on the current\r
+  platform. If Guid is NULL, then the GUID of the first non-local token space of the \r
+  current platform is returned. If Guid is the last non-local token space, \r
+  then NULL is returned. \r
+  If fail to get next token space, then ASSERT_EFI_ERROR().\r
+  \r
+  If Guid is not NULL and is not a valid token space in the current platform, then ASSERT().\r
+\r
 \r
 \r
+  \r
+  @param[in]  Guid  Pointer to a 128-bit unique value that designates from which namespace \r
+                    to start the search.\r
 \r
 \r
-  Status = PcdPpi->GetNextToken (Guid, &TokenNumber);\r
+  @return The next valid token namespace.\r
+\r
+**/\r
+GUID *           \r
+EFIAPI\r
+LibPcdGetNextTokenSpace (\r
+  IN CONST GUID  *TokenSpaceGuid\r
+  )\r
+{\r
+  EFI_STATUS Status;\r
+\r
+  Status = (GetPcdPpiPointer ())->GetNextTokenSpace (&TokenSpaceGuid);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
 \r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  return TokenNumber;\r
+  return (GUID *) TokenSpaceGuid;\r
+}\r
+\r
+\r
+\r
+/**\r
+  Sets the PCD entry specified by PatchVariable to the value specified by Buffer \r
+  and SizeOfBuffer.  Buffer is returned.  If SizeOfBuffer is greater than \r
+  MaximumDatumSize, then set SizeOfBuffer to MaximumDatumSize and return \r
+  NULL to indicate that the set operation was not actually performed.  \r
+  If SizeOfBuffer is set to MAX_ADDRESS, then SizeOfBuffer must be set to \r
+  MaximumDatumSize and NULL must be returned.\r
+  \r
+  If PatchVariable is NULL, then ASSERT().\r
+  If SizeOfBuffer is NULL, then ASSERT().\r
+  If SizeOfBuffer > 0 and Buffer is NULL, then ASSERT().\r
+\r
+  @param[in] PatchVariable      A pointer to the global variable in a module that is \r
+                                the target of the set operation.\r
+  @param[in] MaximumDatumSize   The maximum size allowed for the PCD entry specified by PatchVariable.\r
+  @param[in, out] SizeOfBuffer  A pointer to the size, in bytes, of Buffer.\r
+                                In out, returns actual size of buffer is set.\r
+  @param[in] Buffer             A pointer to the buffer to used to set the target variable.\r
+  \r
+  @return Return the pinter to the buffer been set.\r
+\r
+**/\r
+VOID *\r
+EFIAPI\r
+LibPatchPcdSetPtr (\r
+  IN        VOID        *PatchVariable,\r
+  IN        UINTN       MaximumDatumSize,\r
+  IN OUT    UINTN       *SizeOfBuffer,\r
+  IN CONST  VOID        *Buffer\r
+  )\r
+{\r
+  ASSERT (PatchVariable != NULL);\r
+  ASSERT (SizeOfBuffer  != NULL);\r
+  \r
+  if (*SizeOfBuffer > 0) {\r
+    ASSERT (Buffer != NULL);\r
+  }\r
+\r
+  if ((*SizeOfBuffer > MaximumDatumSize) ||\r
+      (*SizeOfBuffer == MAX_ADDRESS)) {\r
+    *SizeOfBuffer = MaximumDatumSize;\r
+    return NULL;\r
+  }\r
+    \r
+  CopyMem (PatchVariable, Buffer, *SizeOfBuffer);\r
+  \r
+  return (VOID *) Buffer;\r
 }\r
 }\r
+\r
+\r