\r
#include <Protocol/Pcd.h>\r
#include <Protocol/PiPcd.h>\r
+#include <Protocol/PcdInfo.h>\r
+#include <Protocol/PiPcdInfo.h>\r
\r
#include <Library/PcdLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseMemoryLib.h>\r
\r
-PCD_PROTOCOL *mPcd = NULL;\r
-EFI_PCD_PROTOCOL *mPiPcd = NULL;\r
+PCD_PROTOCOL *mPcd = NULL;\r
+EFI_PCD_PROTOCOL *mPiPcd = NULL;\r
+GET_PCD_INFO_PROTOCOL *mPcdInfo = NULL;\r
+EFI_GET_PCD_INFO_PROTOCOL *mPiPcdInfo = NULL;\r
\r
/**\r
Retrieves the PI PCD protocol from the handle database.\r
+\r
+ @retval EFI_PCD_PROTOCOL * The pointer to the EFI_PCD_PROTOCOL.\r
**/\r
EFI_PCD_PROTOCOL *\r
EFIAPI\r
\r
/**\r
Retrieves the PCD protocol from the handle database.\r
+\r
+ @retval PCD_PROTOCOL * The pointer to the PCD_PROTOCOL.\r
**/\r
PCD_PROTOCOL *\r
EFIAPI\r
return mPcd;\r
}\r
\r
+/**\r
+ Retrieves the PI PCD info protocol from the handle database.\r
+\r
+ @retval EFI_GET_PCD_INFO_PROTOCOL * The pointer to the EFI_GET_PCD_INFO_PROTOCOL defined in PI 1.2.1 Vol 3.\r
+**/\r
+EFI_GET_PCD_INFO_PROTOCOL *\r
+GetPiPcdInfoProtocolPointer (\r
+ VOID\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ if (mPiPcdInfo == NULL) {\r
+ Status = gBS->LocateProtocol (&gEfiGetPcdInfoProtocolGuid, NULL, (VOID **)&mPiPcdInfo);\r
+ ASSERT_EFI_ERROR (Status);\r
+ ASSERT (mPiPcdInfo != NULL);\r
+ }\r
+ return mPiPcdInfo;\r
+}\r
+\r
+/**\r
+ Retrieves the PCD info protocol from the handle database.\r
+\r
+ @retval GET_PCD_INFO_PROTOCOL * The pointer to the GET_PCD_INFO_PROTOCOL.\r
+**/\r
+GET_PCD_INFO_PROTOCOL *\r
+GetPcdInfoProtocolPointer (\r
+ VOID\r
+ ) \r
+{\r
+ EFI_STATUS Status;\r
+\r
+ if (mPcdInfo == NULL) {\r
+ Status = gBS->LocateProtocol (&gGetPcdInfoProtocolGuid, NULL, (VOID **)&mPcdInfo);\r
+ ASSERT_EFI_ERROR (Status);\r
+ ASSERT (mPcdInfo != NULL);\r
+ }\r
+ return mPcdInfo;\r
+}\r
\r
/**\r
This function provides a means by which SKU support can be established in the PCD infrastructure.\r
return (VOID *) Buffer;\r
}\r
\r
+/**\r
+ Retrieve additional information associated with a PCD token.\r
+\r
+ This includes information such as the type of value the TokenNumber is associated with as well as possible\r
+ human readable name that is associated with the token.\r
+\r
+ If TokenNumber is not in the default token space specified, then ASSERT().\r
\r
+ @param[in] TokenNumber The PCD token number.\r
+ @param[out] PcdInfo The returned information associated with the requested TokenNumber.\r
+ The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.\r
+**/\r
+VOID\r
+EFIAPI\r
+LibPcdGetInfo (\r
+ IN UINTN TokenNumber,\r
+ OUT PCD_INFO *PcdInfo\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ Status = GetPcdInfoProtocolPointer()->GetInfo (TokenNumber, (EFI_PCD_INFO *) PcdInfo);\r
+ ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
+/**\r
+ Retrieve additional information associated with a PCD token.\r
+\r
+ This includes information such as the type of value the TokenNumber is associated with as well as possible\r
+ human readable name that is associated with the token.\r
+\r
+ If TokenNumber is not in the token space specified by Guid, then ASSERT().\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[out] PcdInfo The returned information associated with the requested TokenNumber.\r
+ The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.\r
+**/\r
+VOID\r
+EFIAPI\r
+LibPcdGetInfoEx (\r
+ IN CONST GUID *Guid,\r
+ IN UINTN TokenNumber,\r
+ OUT PCD_INFO *PcdInfo\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ Status = GetPiPcdInfoProtocolPointer()->GetInfo (Guid, TokenNumber, (EFI_PCD_INFO *) PcdInfo);\r
+ ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
+/**\r
+ Retrieve the currently set SKU Id.\r
+\r
+ If the sku id got >= PCD_MAX_SKU_ID, then ASSERT().\r
+\r
+ @return The currently set SKU Id. If the platform has not set at a SKU Id, then the\r
+ default SKU Id value of 0 is returned. If the platform has set a SKU Id, then the currently set SKU\r
+ Id is returned.\r
+**/\r
+UINTN\r
+EFIAPI\r
+LibPcdGetSku (\r
+ VOID\r
+ )\r
+{\r
+ UINTN SkuId;\r
+\r
+ SkuId = GetPiPcdInfoProtocolPointer()->GetSku ();\r
+ ASSERT (SkuId < PCD_MAX_SKU_ID);\r
+\r
+ return SkuId;\r
+}\r
\r