]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/PCD/Dxe/Pcd.c
Correct typo in comments, clean IfrSupportLib.h
[mirror_edk2.git] / MdeModulePkg / Universal / PCD / Dxe / Pcd.c
index 861de0fa842680deb6394dafcbf40529d3fba704..0c44a64077cf0882c5619929b683bef2b6c3259c 100644 (file)
@@ -1,5 +1,6 @@
 /** @file\r
-PCD DXE driver\r
+  PCD DXE driver manage all PCD entry initialized in PEI phase and DXE phase, and\r
+  produce the implementation of PCD protocol.\r
 \r
 Copyright (c) 2006 - 2007, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -10,18 +11,20 @@ http://opensource.org/licenses/bsd-license.php
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-\r
-Module Name: Pcd.c\r
-\r
 **/\r
 \r
+#include "Service.h"\r
+\r
 //\r
-// Include common header file for this module.\r
+// Just pre-allocate a memory buffer that is big enough to\r
+// host all distinct TokenSpace guid in both\r
+// PEI ExMap and DXE ExMap.\r
 //\r
-#include "CommonHeader.h"\r
-\r
-#include "Service.h"\r
+EFI_GUID *TmpTokenSpaceBuffer[PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZE] = { 0 };\r
 \r
+///\r
+/// PCD database lock.\r
+///\r
 EFI_LOCK mPcdDatabaseLock = EFI_INITIALIZE_LOCK_VARIABLE(TPL_CALLBACK);\r
 \r
 PCD_PROTOCOL mPcdInstance = {\r
@@ -67,8 +70,19 @@ PCD_PROTOCOL mPcdInstance = {
 //\r
 // Static global to reduce the code size\r
 //\r
-static EFI_HANDLE mNewHandle = NULL;\r
+EFI_HANDLE mNewHandle = NULL;\r
+\r
+/**\r
+  Main entry for PCD DXE driver.\r
+  \r
+  This routine initialize the PCD database and install PCD_PROTOCOL.\r
+  \r
+  @param ImageHandle     Image handle for PCD DXE driver.\r
+  @param SystemTable     Pointer to SystemTable.\r
 \r
+  @return Status of gBS->InstallProtocolInterface()\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PcdDxeInit (\r
@@ -99,7 +113,27 @@ PcdDxeInit (
 \r
 }\r
 \r
+/**\r
+  Sets the SKU value for subsequent calls to set or get PCD token values.\r
 \r
+  SetSku() sets the SKU Id to be used for subsequent calls to set or get PCD values. \r
+  SetSku() is normally called only once by the system.\r
+\r
+  For each item (token), the database can hold a single value that applies to all SKUs, \r
+  or multiple values, where each value is associated with a specific SKU Id. Items with multiple, \r
+  SKU-specific values are called SKU enabled. \r
+  \r
+  The SKU Id of zero is reserved as a default. The valid SkuId range is 1 to 255.  \r
+  For tokens that are not SKU enabled, the system ignores any set SKU Id and works with the \r
+  single value for that token. For SKU-enabled tokens, the system will use the SKU Id set by the \r
+  last call to SetSku(). If no SKU Id is set or the currently set SKU Id isn't valid for the specified token, \r
+  the system uses the default SKU Id. If the system attempts to use the default SKU Id and no value has been \r
+  set for that Id, the results are unpredictable.\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
+**/\r
 VOID\r
 EFIAPI\r
 DxePcdSetSku (\r
@@ -111,8 +145,17 @@ DxePcdSetSku (
   return;\r
 }\r
 \r
+/**\r
+  Retrieves an 8-bit value for a given PCD token.\r
 \r
+  Retrieves the current byte-sized value for a PCD token number.  \r
+  If the TokenNumber is invalid, the results are unpredictable.\r
+  \r
+  @param[in]  TokenNumber The PCD token number. \r
 \r
+  @return The UINT8 value.\r
+  \r
+**/\r
 UINT8\r
 EFIAPI\r
 DxePcdGet8 (\r
@@ -122,8 +165,17 @@ DxePcdGet8 (
   return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8)));\r
 }\r
 \r
+/**\r
+  Retrieves an 16-bit value for a given PCD token.\r
 \r
+  Retrieves the current 16-bits value for a PCD token number.  \r
+  If the TokenNumber is invalid, the results are unpredictable.\r
+  \r
+  @param[in]  TokenNumber The PCD token number. \r
 \r
+  @return The UINT16 value.\r
+  \r
+**/\r
 UINT16\r
 EFIAPI\r
 DxePcdGet16 (\r
@@ -133,8 +185,17 @@ DxePcdGet16 (
   return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16)));\r
 }\r
 \r
+/**\r
+  Retrieves an 32-bit value for a given PCD token.\r
 \r
+  Retrieves the current 32-bits value for a PCD token number.  \r
+  If the TokenNumber is invalid, the results are unpredictable.\r
+  \r
+  @param[in]  TokenNumber The PCD token number. \r
 \r
+  @return The UINT32 value.\r
+  \r
+**/\r
 UINT32\r
 EFIAPI\r
 DxePcdGet32 (\r
@@ -144,8 +205,17 @@ DxePcdGet32 (
   return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32)));\r
 }\r
 \r
+/**\r
+  Retrieves an 64-bit value for a given PCD token.\r
 \r
+  Retrieves the current 64-bits value for a PCD token number.  \r
+  If the TokenNumber is invalid, the results are unpredictable.\r
+  \r
+  @param[in]  TokenNumber The PCD token number. \r
 \r
+  @return The UINT64 value.\r
+  \r
+**/\r
 UINT64\r
 EFIAPI\r
 DxePcdGet64 (\r
@@ -155,8 +225,19 @@ DxePcdGet64 (
   return ReadUnaligned64(GetWorker (TokenNumber, sizeof (UINT64)));\r
 }\r
 \r
+/**\r
+  Retrieves a pointer to a value for a given PCD token.\r
 \r
+  Retrieves the current pointer to the buffer for a PCD token number.  \r
+  Do not make any assumptions about the alignment of the pointer that \r
+  is returned by this function call.  If the TokenNumber is invalid, \r
+  the results are unpredictable.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+\r
+  @return The pointer to the buffer to be retrived.\r
+  \r
+**/\r
 VOID *\r
 EFIAPI\r
 DxePcdGetPtr (\r
@@ -166,8 +247,19 @@ DxePcdGetPtr (
   return GetWorker (TokenNumber, 0);\r
 }\r
 \r
+/**\r
+  Retrieves a Boolean value for a given PCD token.\r
+\r
+  Retrieves the current boolean value for a PCD token number.  \r
+  Do not make any assumptions about the alignment of the pointer that \r
+  is returned by this function call.  If the TokenNumber is invalid, \r
+  the results are unpredictable.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
 \r
+  @return The Boolean value.\r
+  \r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 DxePcdGetBool (\r
@@ -177,8 +269,17 @@ DxePcdGetBool (
   return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN)));\r
 }\r
 \r
+/**\r
+  Retrieves the size of the value for a given PCD token.\r
 \r
+  Retrieves the current size of a particular PCD token.  \r
+  If the TokenNumber is invalid, the results are unpredictable.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+\r
+  @return The size of the value for the PCD token.\r
+  \r
+**/\r
 UINTN\r
 EFIAPI\r
 DxePcdGetSize (\r
@@ -231,20 +332,44 @@ DxePcdGetSize (
 \r
 }\r
 \r
+/**\r
+  Retrieves an 8-bit value for a given PCD token.\r
+\r
+  Retrieves the 8-bit value of a particular PCD token.  \r
+  If the TokenNumber is invalid or the token space\r
+  specified by Guid does not exist, the results are \r
+  unpredictable.\r
 \r
+  @param[in]  Guid          The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
 \r
+  @return The size 8-bit value for the PCD token.\r
+  \r
+**/\r
 UINT8\r
 EFIAPI\r
 DxePcdGet8Ex (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                 ExTokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
   return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT8)));\r
 }\r
 \r
+/**\r
+  Retrieves an 16-bit value for a given PCD token.\r
+\r
+  Retrieves the 16-bit value of a particular PCD token.  \r
+  If the TokenNumber is invalid or the token space\r
+  specified by Guid does not exist, the results are \r
+  unpredictable.\r
 \r
+  @param[in]  Guid The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
 \r
+  @return The size 16-bit value for the PCD token.\r
+  \r
+**/\r
 UINT16\r
 EFIAPI\r
 DxePcdGet16Ex (\r
@@ -255,8 +380,20 @@ DxePcdGet16Ex (
   return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof(UINT16)));\r
 }\r
 \r
+/**\r
+  Retrieves an 32-bit value for a given PCD token.\r
+\r
+  Retrieves the 32-bit value of a particular PCD token.  \r
+  If the TokenNumber is invalid or the token space\r
+  specified by Guid does not exist, the results are \r
+  unpredictable.\r
 \r
+  @param[in]  Guid The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
 \r
+  @return The size 32-bit value for the PCD token.\r
+  \r
+**/\r
 UINT32\r
 EFIAPI\r
 DxePcdGet32Ex (\r
@@ -267,8 +404,20 @@ DxePcdGet32Ex (
   return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof(UINT32)));\r
 }\r
 \r
+/**\r
+  Retrieves an 64-bit value for a given PCD token.\r
 \r
+  Retrieves the 64-bit value of a particular PCD token.  \r
+  If the TokenNumber is invalid or the token space\r
+  specified by Guid does not exist, the results are \r
+  unpredictable.\r
 \r
+  @param[in]  Guid The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+\r
+  @return The size 64-bit value for the PCD token.\r
+  \r
+**/\r
 UINT64\r
 EFIAPI\r
 DxePcdGet64Ex (\r
@@ -279,8 +428,20 @@ DxePcdGet64Ex (
   return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof(UINT64)));\r
 }\r
 \r
+/**\r
+  Retrieves a pointer to a value for a given PCD token.\r
+\r
+  Retrieves the current pointer to the buffer for a PCD token number.  \r
+  Do not make any assumptions about the alignment of the pointer that \r
+  is returned by this function call.  If the TokenNumber is invalid, \r
+  the results are unpredictable.\r
 \r
+  @param[in]  Guid The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
 \r
+  @return The pointer to the buffer to be retrived.\r
+  \r
+**/\r
 VOID *\r
 EFIAPI\r
 DxePcdGetPtrEx (\r
@@ -291,8 +452,20 @@ DxePcdGetPtrEx (
   return  ExGetWorker (Guid, ExTokenNumber, 0);\r
 }\r
 \r
+/**\r
+  Retrieves an Boolean value for a given PCD token.\r
 \r
+  Retrieves the Boolean value of a particular PCD token.  \r
+  If the TokenNumber is invalid or the token space\r
+  specified by Guid does not exist, the results are \r
+  unpredictable.\r
 \r
+  @param[in]  Guid The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+\r
+  @return The size Boolean value for the PCD token.\r
+  \r
+**/\r
 BOOLEAN\r
 EFIAPI\r
 DxePcdGetBoolEx (\r
@@ -303,8 +476,18 @@ DxePcdGetBoolEx (
   return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof(BOOLEAN)));\r
 }\r
 \r
+/**\r
+  Retrieves the size of the value for a given PCD token.\r
+\r
+  Retrieves the current size of a particular PCD token.  \r
+  If the TokenNumber is invalid, the results are unpredictable.\r
 \r
+  @param[in]  Guid The token space for the token number.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
 \r
+  @return The size of the value for the PCD token.\r
+  \r
+**/\r
 UINTN\r
 EFIAPI\r
 DxePcdGetSizeEx (\r
@@ -315,8 +498,23 @@ DxePcdGetSizeEx (
   return DxePcdGetSize(GetExPcdTokenNumber (Guid, (UINT32) ExTokenNumber));\r
 }\r
 \r
+/**\r
+  Sets an 8-bit value for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
 \r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet8 (\r
@@ -327,8 +525,23 @@ DxePcdSet8 (
   return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 16-bit value for a given PCD token.\r
 \r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
+\r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet16 (\r
@@ -339,8 +552,23 @@ DxePcdSet16 (
   return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 32-bit value for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
 \r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet32 (\r
@@ -351,8 +579,23 @@ DxePcdSet32 (
   return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 64-bit value for a given PCD token.\r
 \r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
+\r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet64 (\r
@@ -363,8 +606,27 @@ DxePcdSet64 (
   return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
 }\r
 \r
-\r
-\r
+/**\r
+  Sets a value of a specified size for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
+\r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token.  \r
+                              On input, if the SizeOfValue is greater than the maximum size supported \r
+                              for this TokenNumber then the output value of SizeOfValue will reflect \r
+                              the maximum size supported for this TokenNumber.\r
+  @param[in]  Buffer The buffer to set for the PCD token.\r
+\r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetPtr (\r
@@ -376,8 +638,23 @@ DxePcdSetPtr (
   return SetWorker (TokenNumber, Buffer, SizeOfBuffer, TRUE);\r
 }\r
 \r
+/**\r
+  Sets an Boolean value for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
 \r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetBool (\r
@@ -388,8 +665,24 @@ DxePcdSetBool (
   return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 8-bit value for a given PCD token.\r
 \r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
+\r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet8Ex (\r
@@ -401,8 +694,24 @@ DxePcdSet8Ex (
   return  ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 16-bit value for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
 \r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet16Ex (\r
@@ -414,8 +723,24 @@ DxePcdSet16Ex (
   return  ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 32-bit value for a given PCD token.\r
 \r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
+\r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet32Ex (\r
@@ -427,8 +752,24 @@ DxePcdSet32Ex (
   return  ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Sets an 64-bit value for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
 \r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet64Ex (\r
@@ -440,8 +781,28 @@ DxePcdSet64Ex (
   return  ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
 }\r
 \r
-\r
-\r
+/**\r
+  Sets a value of a specified size for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
+\r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+  @param[in, out] SizeOfBuffer A pointer to the length of the value being set for the PCD token.  \r
+                              On input, if the SizeOfValue is greater than the maximum size supported \r
+                              for this TokenNumber then the output value of SizeOfValue will reflect \r
+                              the maximum size supported for this TokenNumber.\r
+  @param[in]  Buffer The buffer to set for the PCD token.\r
+\r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetPtrEx (\r
@@ -454,8 +815,24 @@ DxePcdSetPtrEx (
   return  ExSetWorker(ExTokenNumber, Guid, Buffer, SizeOfBuffer, TRUE);\r
 }\r
 \r
+/**\r
+  Sets an Boolean value for a given PCD token.\r
+\r
+  When the PCD service sets a value, it will check to ensure that the \r
+  size of the value being set is compatible with the Token's existing definition.  \r
+  If it is not, an error will be returned.\r
 \r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  ExTokenNumber The PCD token number. \r
+  @param[in]  Value The value to set for the PCD token.\r
 \r
+  @retval EFI_SUCCESS  Procedure returned successfully.\r
+  @retval EFI_INVALID_PARAMETER The PCD service determined that the size of the data \r
+                                  being set was incompatible with a call to this function.  \r
+                                  Use GetSize() to retrieve the size of the target data.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
+  \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetBoolEx (\r
@@ -467,9 +844,18 @@ DxePcdSetBoolEx (
   return  ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
 }\r
 \r
+/**\r
+  Specifies a function to be called anytime the value of a designated token is changed.\r
 \r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  CallBackFunction The function prototype called when the value associated with the CallBackToken is set.  \r
 \r
+  @retval EFI_SUCCESS  The PCD service has successfully established a call event \r
+                        for the CallBackToken requested.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the referenced token number.\r
 \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxeRegisterCallBackOnSet (\r
@@ -480,8 +866,9 @@ DxeRegisterCallBackOnSet (
 {\r
   EFI_STATUS Status;\r
   \r
-  ASSERT (CallBackFunction != NULL);\r
-  \r
+  if (CallBackFunction == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
   //\r
   // Aquire lock to prevent reentrance from TPL_CALLBACK level\r
   //\r
@@ -494,8 +881,18 @@ DxeRegisterCallBackOnSet (
   return Status;\r
 }\r
 \r
+/**\r
+  Cancels a previously set callback function for a particular PCD token number.\r
+\r
+  @param[in]  Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in]  TokenNumber The PCD token number. \r
+  @param[in]  CallBackFunction The function prototype called when the value associated with the CallBackToken is set.  \r
 \r
+  @retval EFI_SUCCESS  The PCD service has successfully established a call event \r
+                        for the CallBackToken requested.\r
+  @retval EFI_NOT_FOUND The PCD service could not find the referenced token number.\r
 \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxeUnRegisterCallBackOnSet (\r
@@ -506,7 +903,9 @@ DxeUnRegisterCallBackOnSet (
 {\r
   EFI_STATUS Status;\r
   \r
-  ASSERT (CallBackFunction != NULL);\r
+  if (CallBackFunction == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
 \r
   //\r
   // Aquire lock to prevent reentrance from TPL_CALLBACK level\r
@@ -520,8 +919,24 @@ DxeUnRegisterCallBackOnSet (
   return Status;\r
 }\r
 \r
+/**\r
+  Retrieves the next valid PCD token for a given namespace.\r
+\r
+  @param[in]      Guid          The 128-bit unique value that designates the namespace from which to extract the value.\r
+  @param[in, out]  TokenNumber   A pointer to the PCD token number to use to find the subsequent token number.  \r
+                                If the input token namespace or token number does not exist on the platform, \r
+                                an error is returned and the value of *TokenNumber is undefined. To retrieve the "first" token, \r
+                                have the pointer reference a TokenNumber value of 0. If the input token number is 0 and \r
+                                there is no valid token number for this token namespace,  *TokenNumber will be assigned to \r
+                                0 and the function return EFI_SUCCESS. If the token number is the last valid token number, \r
+                                *TokenNumber will be assigned to 0 and the function return EFI_SUCCESS.\r
 \r
+  @retval EFI_SUCCESS  The PCD service retrieved the next valid token number. Or the input token number \r
+                        is already the last valid token number in the PCD database. \r
+                        In the later case, *TokenNumber is updated with the value of 0.\r
+  @retval EFI_NOT_FOUND If this input token number and token namespace does not exist on the platform.\r
 \r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdGetNextToken (\r
@@ -601,7 +1016,16 @@ DxePcdGetNextToken (
   return Status;\r
 }\r
 \r
-STATIC\r
+/**\r
+  Get all token space guid table which is different with given token space guid.\r
+\r
+  @param ExMapTableSize  The size of guid table\r
+  @param ExMapTable      Token space guid table that want to be scaned.\r
+  @param GuidTable       Guid table\r
+\r
+  @return all token space guid table which is different with given token space guid.\r
+\r
+**/\r
 EFI_GUID **\r
 GetDistinctTokenSpace (\r
   IN OUT    UINTN             *ExMapTableSize,\r
@@ -638,13 +1062,21 @@ GetDistinctTokenSpace (
     \r
 }\r
   \r
-//\r
-// Just pre-allocate a memory buffer that is big enough to\r
-// host all distinct TokenSpace guid in both\r
-// PEI ExMap and DXE ExMap.\r
-//\r
-STATIC EFI_GUID *TmpTokenSpaceBuffer[PEI_EXMAPPING_TABLE_SIZE + DXE_EXMAPPING_TABLE_SIZE] = { 0 };\r
-\r
+/**\r
+  Get next token space in PCD database according to given token space guid.\r
+  \r
+  This routine is enable only when feature flag PCD PcdDxePcdDatabaseTraverseEnabled \r
+  is TRUE.\r
+  \r
+  @param Guid            Given token space guid. If NULL, then Guid will be set to \r
+                         the first PCD token space in PCD database, If not NULL, then\r
+                         Guid will be set to next PCD token space.\r
+\r
+  @retval EFI_UNSUPPORTED If feature flag PCD PcdDxePcdDatabaseTraverseEnabled is FALSE.\r
+  @retval EFI_NOT_FOUND   If PCD database has no token space table or can not find given\r
+                          token space in PCD database.\r
+  @retval EFI_SUCCESS     Success to get next token space guid.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 DxePcdGetNextTokenSpace (\r
@@ -731,7 +1163,6 @@ DxePcdGetNextTokenSpace (
   }\r
 \r
   return EFI_NOT_FOUND;\r
-\r
 }\r
 \r
 \r