#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/BaseMemoryLib.h>\r
\r
-PCD_PROTOCOL *mPcd = NULL;\r
+PCD_PROTOCOL *mPcd = NULL;\r
EFI_PCD_PROTOCOL *mPiPcd = NULL;\r
\r
/**\r
- The constructor function caches the PCD_PROTOCOL pointer.\r
+ Retrieves the PI PCD protocol from the handle database.\r
+**/\r
+EFI_PCD_PROTOCOL *\r
+EFIAPI\r
+GetPiPcdProtocol (\r
+ VOID\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image. \r
- @param[in] SystemTable A pointer to the EFI System Table.\r
- \r
- @retval EFI_SUCCESS The constructor always return EFI_SUCCESS.\r
+ if (mPiPcd == NULL) {\r
+ //\r
+ // PI Pcd protocol defined in PI 1.2 vol3 should be installed before the module \r
+ // access DynamicEx type PCD.\r
+ //\r
+ Status = gBS->LocateProtocol (&gEfiPcdProtocolGuid, NULL, (VOID **) &mPiPcd);\r
+ ASSERT_EFI_ERROR (Status);\r
+ ASSERT (mPiPcd != NULL);\r
+ }\r
+ return mPiPcd;\r
+}\r
\r
+/**\r
+ Retrieves the PCD protocol from the handle database.\r
**/\r
-EFI_STATUS\r
+PCD_PROTOCOL *\r
EFIAPI\r
-PcdLibConstructor (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+GetPcdProtocol (\r
+ VOID\r
)\r
{\r
EFI_STATUS Status;\r
\r
- //\r
- // PCD protocol need to be installed before the module access Dynamic type PCD.\r
- // But dynamic type PCD is not required in PI 1.2 specification.\r
- // \r
- gBS->LocateProtocol (&gPcdProtocolGuid, NULL, (VOID **)&mPcd);\r
- \r
- //\r
- // PI Pcd protocol defined in PI 1.2 vol3 should be installed before the module \r
- // access DynamicEx type PCD.\r
- //\r
- Status = gBS->LocateProtocol (&gEfiPcdProtocolGuid, NULL, (VOID **) &mPiPcd);\r
- \r
- ASSERT_EFI_ERROR (Status);\r
- ASSERT (mPiPcd!= NULL);\r
-\r
- return Status;\r
+ if (mPcd == NULL) {\r
+ //\r
+ // PCD protocol need to be installed before the module access Dynamic type PCD.\r
+ // But dynamic type PCD is not required in PI 1.2 specification.\r
+ // \r
+ Status = gBS->LocateProtocol (&gPcdProtocolGuid, NULL, (VOID **)&mPcd);\r
+ ASSERT_EFI_ERROR (Status);\r
+ ASSERT (mPcd != NULL);\r
+ }\r
+ return mPcd;\r
}\r
\r
\r
IN UINTN SkuId\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
ASSERT (SkuId < PCD_MAX_SKU_ID);\r
\r
- mPcd->SetSku (SkuId);\r
+ GetPcdProtocol()->SetSku (SkuId);\r
\r
return SkuId;\r
}\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->Get8 (TokenNumber);\r
+ return GetPcdProtocol()->Get8 (TokenNumber);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->Get16 (TokenNumber);\r
+ return GetPcdProtocol()->Get16 (TokenNumber);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->Get32 (TokenNumber);\r
+ return GetPcdProtocol()->Get32 (TokenNumber);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->Get64 (TokenNumber);\r
+ return GetPcdProtocol()->Get64 (TokenNumber);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->GetPtr (TokenNumber);\r
+ return GetPcdProtocol()->GetPtr (TokenNumber);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->GetBool (TokenNumber);\r
+ return GetPcdProtocol()->GetBool (TokenNumber);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- ASSERT (mPcd != NULL);\r
- return mPcd->GetSize (TokenNumber);\r
+ return GetPcdProtocol()->GetSize (TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->Get8 (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->Get8 (Guid, TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->Get16 (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->Get16 (Guid, TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->Get32 (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->Get32 (Guid, TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->Get64 (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->Get64 (Guid, TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->GetPtr (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->GetPtr (Guid, TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->GetBool (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->GetBool (Guid, TokenNumber);\r
}\r
\r
\r
{\r
ASSERT (Guid != NULL);\r
\r
- return mPiPcd->GetSize (Guid, TokenNumber);\r
+ return GetPiPcdProtocol()->GetSize (Guid, TokenNumber);\r
}\r
\r
\r
{\r
EFI_STATUS Status;\r
\r
- ASSERT (mPcd != NULL);\r
- Status = mPcd->Set8 (TokenNumber, Value);\r
-\r
+ Status = GetPcdProtocol()->Set8 (TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
{\r
EFI_STATUS Status;\r
\r
- ASSERT (mPcd != NULL);\r
- Status = mPcd->Set16 (TokenNumber, Value);\r
-\r
+ Status = GetPcdProtocol()->Set16 (TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
{\r
EFI_STATUS Status;\r
\r
- ASSERT (mPcd != NULL);\r
- Status = mPcd->Set32 (TokenNumber, Value);\r
-\r
+ Status = GetPcdProtocol()->Set32 (TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
{\r
EFI_STATUS Status;\r
\r
- ASSERT (mPcd != NULL);\r
- Status = mPcd->Set64 (TokenNumber, Value);\r
-\r
+ Status = GetPcdProtocol()->Set64 (TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
{\r
EFI_STATUS Status;\r
\r
- ASSERT (mPcd != NULL);\r
ASSERT (SizeOfBuffer != NULL);\r
\r
if (*SizeOfBuffer > 0) {\r
ASSERT (Buffer != NULL);\r
}\r
\r
- Status = mPcd->SetPtr (TokenNumber, SizeOfBuffer, (VOID *) Buffer);\r
-\r
+ Status = GetPcdProtocol()->SetPtr (TokenNumber, SizeOfBuffer, (VOID *) Buffer);\r
if (EFI_ERROR (Status)) {\r
return NULL;\r
}\r
\r
- return (VOID *) Buffer;\r
+ return (VOID *)Buffer;\r
}\r
\r
\r
{\r
EFI_STATUS Status;\r
\r
- ASSERT (mPcd != NULL);\r
- Status = mPcd->SetBool (TokenNumber, Value);\r
-\r
+ Status = GetPcdProtocol()->SetBool (TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
\r
ASSERT (Guid != NULL);\r
\r
- Status = mPiPcd->Set8 (Guid, TokenNumber, Value);\r
-\r
+ Status = GetPiPcdProtocol()->Set8 (Guid, TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
\r
ASSERT (Guid != NULL);\r
\r
- Status = mPiPcd->Set16 (Guid, TokenNumber, Value);\r
-\r
+ Status = GetPiPcdProtocol()->Set16 (Guid, TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
\r
ASSERT (Guid != NULL);\r
\r
- Status = mPiPcd->Set32 (Guid, TokenNumber, Value);\r
-\r
+ Status = GetPiPcdProtocol()->Set32 (Guid, TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
\r
ASSERT (Guid != NULL);\r
\r
- Status = mPiPcd->Set64 (Guid, TokenNumber, Value);\r
-\r
+ Status = GetPiPcdProtocol()->Set64 (Guid, TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
@param[in, out] SizeOfBuffer The size, in bytes, of Buffer.\r
@param[in] Buffer A pointer to the buffer to set.\r
\r
- @return Return the pinter to the buffer been set.\r
+ @return Return the pointer to the buffer been set.\r
\r
**/\r
VOID *\r
ASSERT (Buffer != NULL);\r
}\r
\r
- Status = mPiPcd->SetPtr (Guid, TokenNumber, SizeOfBuffer, Buffer);\r
-\r
+ Status = GetPiPcdProtocol()->SetPtr (Guid, TokenNumber, SizeOfBuffer, Buffer);\r
if (EFI_ERROR (Status)) {\r
return NULL;\r
}\r
\r
ASSERT (Guid != NULL);\r
\r
- Status = mPiPcd->SetBool (Guid, TokenNumber, Value);\r
-\r
+ Status = GetPiPcdProtocol()->SetBool (Guid, TokenNumber, Value);\r
ASSERT_EFI_ERROR (Status);\r
\r
return Value;\r
\r
ASSERT (NotificationFunction != NULL);\r
\r
- Status = mPiPcd->CallbackOnSet (Guid, TokenNumber, (EFI_PCD_PROTOCOL_CALLBACK) NotificationFunction);\r
-\r
+ Status = GetPiPcdProtocol()->CallbackOnSet (Guid, TokenNumber, (EFI_PCD_PROTOCOL_CALLBACK) NotificationFunction);\r
ASSERT_EFI_ERROR (Status);\r
\r
return;\r
\r
ASSERT (NotificationFunction != NULL);\r
\r
- Status = mPiPcd->CancelCallback (Guid, TokenNumber, (EFI_PCD_PROTOCOL_CALLBACK) NotificationFunction);\r
-\r
+ Status = GetPiPcdProtocol()->CancelCallback (Guid, TokenNumber, (EFI_PCD_PROTOCOL_CALLBACK) NotificationFunction);\r
ASSERT_EFI_ERROR (Status);\r
\r
return;\r
{\r
EFI_STATUS Status;\r
\r
- Status = mPiPcd->GetNextToken (Guid, &TokenNumber);\r
-\r
+ Status = GetPiPcdProtocol()->GetNextToken (Guid, &TokenNumber);\r
ASSERT_EFI_ERROR (Status);\r
\r
return TokenNumber;\r
{\r
EFI_STATUS Status;\r
\r
- Status = mPiPcd->GetNextTokenSpace (&TokenSpaceGuid);\r
-\r
+ Status = GetPiPcdProtocol()->GetNextTokenSpace (&TokenSpaceGuid);\r
ASSERT_EFI_ERROR (Status);\r
\r
- return (GUID *) TokenSpaceGuid;\r
+ return (GUID *)TokenSpaceGuid;\r
}\r
\r
\r