]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Pei/Pcd.c
Check in the Pcd service Driver/PEIM according to the new way of generating PCD Database
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Pei / Pcd.c
index 3fb49dd54f925617256f56c9168d91b4b15dd128..88d1fb0f62a1276193fdb47dec076056d7a20099 100644 (file)
@@ -1,5 +1,4 @@
-/** @file\r
-PCD PEIM\r
+/** @file PCD PEIM\r
 \r
 Copyright (c) 2006, Intel Corporation                                                         \r
 All rights reserved. This program and the accompanying materials                          \r
 \r
 Copyright (c) 2006, Intel Corporation                                                         \r
 All rights reserved. This program and the accompanying materials                          \r
@@ -15,7 +14,7 @@ Module Name: Pcd.c
 \r
 **/\r
 \r
 \r
 **/\r
 \r
-#include "../Common/PcdCommon.h"\r
+#include "PcdCommon.h"\r
 #include "Service.h"\r
 \r
 \r
 #include "Service.h"\r
 \r
 \r
@@ -75,12 +74,9 @@ PcdPeimInit (
   )\r
 {\r
   EFI_STATUS Status;\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  UINT8      *PcdImage;\r
-\r
-  PcdImage = (UINT8 *) LocatePcdImage ();\r
-\r
-  BuildPcdDatabase (PcdImage);\r
 \r
 \r
+  BuildPcdDatabase ();\r
+  \r
   Status = PeiCoreInstallPpi (&mPpiPCD);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
   Status = PeiCoreInstallPpi (&mPpiPCD);\r
 \r
   ASSERT_EFI_ERROR (Status);\r
@@ -88,25 +84,16 @@ PcdPeimInit (
   return EFI_SUCCESS;\r
 }\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
-\r
-\r
 EFI_STATUS\r
 EFIAPI\r
 PeiPcdSetSku (\r
   IN  UINTN                  SkuId\r
   )\r
 {\r
 EFI_STATUS\r
 EFIAPI\r
 PeiPcdSetSku (\r
   IN  UINTN                  SkuId\r
   )\r
 {\r
-  PCD_DATABASE      *Database;\r
-  EFI_HOB_GUID_TYPE *GuidHob;\r
 \r
 \r
-  GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
-  ASSERT (GuidHob != NULL);\r
-  \r
-  Database = (PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
-\r
-  Database->Info.SkuId = SkuId;\r
+  GetPcdDatabase()->Init.SystemSkuId = (SKU_ID) SkuId;\r
 \r
 \r
-  return SkuId;\r
+  return  EFI_SUCCESS;\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -117,7 +104,7 @@ PeiPcdGet8 (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGet8Ex (NULL, TokenNumber);\r
+  return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -128,7 +115,7 @@ PeiPcdGet16 (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGet16Ex (NULL, TokenNumber);\r
+  return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -139,7 +126,7 @@ PeiPcdGet32 (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGet32Ex (NULL, TokenNumber);\r
+  return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -150,7 +137,7 @@ PeiPcdGet64 (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGet64Ex (NULL, TokenNumber);\r
+  return ReadUnaligned64 (GetWorker (TokenNumber, sizeof (UINT64)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -161,7 +148,7 @@ PeiPcdGetPtr (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGetPtrEx (NULL, TokenNumber);\r
+  return GetWorker (TokenNumber, 0);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -172,7 +159,7 @@ PeiPcdGetBool (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGetBoolEx (NULL, TokenNumber);\r
+  return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -183,7 +170,9 @@ PeiPcdGetSize (
   IN UINTN  TokenNumber\r
   )\r
 {\r
   IN UINTN  TokenNumber\r
   )\r
 {\r
-  return PeiPcdGetSizeEx (NULL, TokenNumber);\r
+  ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
+\r
+  return GetPcdDatabase()->Init.SizeTable[TokenNumber];\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -192,14 +181,10 @@ UINT8
 EFIAPI\r
 PeiPcdGet8Ex (\r
   IN CONST EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGet8Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  UINT8 Data;\r
-  \r
-  PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Data);\r
-  \r
-  return Data;\r
+  return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof (UINT8)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -208,14 +193,10 @@ UINT16
 EFIAPI\r
 PeiPcdGet16Ex (\r
   IN CONST EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGet16Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  UINT16 Data;\r
-  \r
-  PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Data);\r
-  \r
-  return Data;\r
+  return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT16)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -224,14 +205,10 @@ UINT32
 EFIAPI\r
 PeiPcdGet32Ex (\r
   IN CONST EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGet32Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  UINT32 Data;\r
-  \r
-  PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Data);\r
-  \r
-  return Data;\r
+  return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT32)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -240,14 +217,10 @@ UINT64
 EFIAPI\r
 PeiPcdGet64Ex (\r
   IN CONST EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGet64Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  UINT64 Data;\r
-  \r
-  PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Data);\r
-  \r
-  return Data;\r
+  return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT64)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -256,14 +229,10 @@ VOID *
 EFIAPI\r
 PeiPcdGetPtrEx (\r
   IN CONST EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGetPtrEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  VOID *Data;\r
-  \r
-  PeiGetPcdEntryWorker (TokenNumber, Guid, PcdPointer, &Data);\r
-  \r
-  return Data;\r
+  return ExGetWorker (Guid, ExTokenNumber, 0);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -272,14 +241,10 @@ BOOLEAN
 EFIAPI\r
 PeiPcdGetBoolEx (\r
   IN CONST  EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGetBoolEx (\r
   IN CONST  EFI_GUID        *Guid,\r
-  IN UINTN                  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  BOOLEAN Data;\r
-  \r
-  PeiGetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Data);\r
-  \r
-  return Data;\r
+  return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof (BOOLEAN)));\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -288,10 +253,14 @@ UINTN
 EFIAPI\r
 PeiPcdGetSizeEx (\r
   IN CONST  EFI_GUID        *Guid,\r
 EFIAPI\r
 PeiPcdGetSizeEx (\r
   IN CONST  EFI_GUID        *Guid,\r
-  IN UINTN                  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
   )\r
 {\r
-  return PeiGetPcdEntrySizeWorker (TokenNumber, Guid);\r
+  EX_PCD_ENTRY_ATTRIBUTE      Attr;\r
+\r
+  GetExPcdTokenAttributes (Guid, ExTokenNumber, &Attr);\r
+  \r
+  return Attr.Size;\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -303,7 +272,7 @@ PeiPcdSet8 (
   IN UINT8             Value\r
   )\r
 {\r
   IN UINT8             Value\r
   )\r
 {\r
-  return PeiPcdSet8Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -315,7 +284,7 @@ PeiPcdSet16 (
   IN UINT16             Value\r
   )\r
 {\r
   IN UINT16             Value\r
   )\r
 {\r
-  return PeiPcdSet16Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -327,7 +296,7 @@ PeiPcdSet32 (
   IN UINT32             Value\r
   )\r
 {\r
   IN UINT32             Value\r
   )\r
 {\r
-  return PeiPcdSet32Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -339,7 +308,7 @@ PeiPcdSet64 (
   IN UINT64             Value\r
   )\r
 {\r
   IN UINT64             Value\r
   )\r
 {\r
-  return PeiPcdSet64Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -350,7 +319,12 @@ PeiPcdSetPtr (
   IN CONST VOID         *Value\r
   )\r
 {\r
   IN CONST VOID         *Value\r
   )\r
 {\r
-  return PeiPcdSetPtrEx (NULL, TokenNumber, Value);\r
+  //\r
+  // BugBug, please change the Size to Input size when sync with spec\r
+  //\r
+  //ASSERT (sizeof (Value) == GetPcdDatabase()->Init.SizeTable[TokenNumber]);\r
+\r
+  return SetWorker (TokenNumber, (VOID *) Value, GetPcdDatabase()->Init.SizeTable[TokenNumber], TRUE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -362,7 +336,7 @@ PeiPcdSetBool (
   IN BOOLEAN            Value\r
   )\r
 {\r
   IN BOOLEAN            Value\r
   )\r
 {\r
-  return PeiPcdSetBoolEx (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -371,11 +345,17 @@ EFI_STATUS
 EFIAPI\r
 PeiPcdSet8Ex (\r
   IN CONST EFI_GUID         *Guid,\r
 EFIAPI\r
 PeiPcdSet8Ex (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                  TokenNumber,\r
+  IN UINTN                  ExTokenNumber,\r
   IN UINT8                  Value\r
   )\r
 {\r
   IN UINT8                  Value\r
   )\r
 {\r
-  return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -384,11 +364,17 @@ EFI_STATUS
 EFIAPI\r
 PeiPcdSet16Ex (\r
   IN CONST EFI_GUID         *Guid,\r
 EFIAPI\r
 PeiPcdSet16Ex (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                  TokenNumber,\r
+  IN UINTN                  ExTokenNumber,\r
   IN UINT16                 Value\r
   )\r
 {\r
   IN UINT16                 Value\r
   )\r
 {\r
-  return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -397,11 +383,17 @@ EFI_STATUS
 EFIAPI\r
 PeiPcdSet32Ex (\r
   IN CONST EFI_GUID         *Guid,\r
 EFIAPI\r
 PeiPcdSet32Ex (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                  TokenNumber,\r
+  IN UINTN                  ExTokenNumber,\r
   IN UINT32                 Value\r
   )\r
 {\r
   IN UINT32                 Value\r
   )\r
 {\r
-  return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -410,11 +402,17 @@ EFI_STATUS
 EFIAPI\r
 PeiPcdSet64Ex (\r
   IN CONST EFI_GUID         *Guid,\r
 EFIAPI\r
 PeiPcdSet64Ex (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                  TokenNumber,\r
+  IN UINTN                  ExTokenNumber,\r
   IN UINT64                 Value\r
   )\r
 {\r
   IN UINT64                 Value\r
   )\r
 {\r
-  return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -423,11 +421,17 @@ EFI_STATUS
 EFIAPI\r
 PeiPcdSetPtrEx (\r
   IN CONST EFI_GUID         *Guid,\r
 EFIAPI\r
 PeiPcdSetPtrEx (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN UINTN                  TokenNumber,\r
+  IN UINTN                  ExTokenNumber,\r
   IN CONST VOID             *Value\r
   )\r
 {\r
   IN CONST VOID             *Value\r
   )\r
 {\r
-  return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdPointer, (VOID *)Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              (VOID *) Value, \r
+                              sizeof (Value), \r
+                              TRUE\r
+                              );\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -436,12 +440,17 @@ EFI_STATUS
 EFIAPI\r
 PeiPcdSetBoolEx (\r
   IN CONST EFI_GUID       *Guid,\r
 EFIAPI\r
 PeiPcdSetBoolEx (\r
   IN CONST EFI_GUID       *Guid,\r
-  IN UINTN                TokenNumber,\r
+  IN UINTN                ExTokenNumber,\r
   IN BOOLEAN              Value\r
   )\r
 {\r
   IN BOOLEAN              Value\r
   )\r
 {\r
-  return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Value);\r
-\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -450,12 +459,12 @@ PeiPcdSetBoolEx (
 EFI_STATUS\r
 EFIAPI\r
 PcdRegisterCallBackOnSet (\r
 EFI_STATUS\r
 EFIAPI\r
 PcdRegisterCallBackOnSet (\r
-  IN  UINTN                       TokenNumber,\r
+  IN  UINTN                       ExTokenNumber,\r
   IN  CONST EFI_GUID              *Guid, OPTIONAL\r
   IN  PCD_PPI_CALLBACK            CallBackFunction\r
   )\r
 {\r
   IN  CONST EFI_GUID              *Guid, OPTIONAL\r
   IN  PCD_PPI_CALLBACK            CallBackFunction\r
   )\r
 {\r
-  return PeiRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction, TRUE);\r
+  return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, TRUE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -463,12 +472,12 @@ PcdRegisterCallBackOnSet (
 EFI_STATUS\r
 EFIAPI\r
 PcdUnRegisterCallBackOnSet (\r
 EFI_STATUS\r
 EFIAPI\r
 PcdUnRegisterCallBackOnSet (\r
-  IN  UINTN                       TokenNumber,\r
+  IN  UINTN                       ExTokenNumber,\r
   IN  CONST EFI_GUID              *Guid, OPTIONAL\r
   IN  PCD_PPI_CALLBACK            CallBackFunction\r
   )\r
 {\r
   IN  CONST EFI_GUID              *Guid, OPTIONAL\r
   IN  PCD_PPI_CALLBACK            CallBackFunction\r
   )\r
 {\r
-  return PeiRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction, FALSE);\r
+  return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, FALSE);\r
 }\r
 \r
 \r
 }\r
 \r
 \r
@@ -480,7 +489,19 @@ PeiPcdGetNextToken (
   IN OUT  UINTN                   *TokenNumber\r
   )\r
 {\r
   IN OUT  UINTN                   *TokenNumber\r
   )\r
 {\r
-  return PeiGetNextTokenWorker (TokenNumber, Guid);\r
+  if (Guid == NULL) {\r
+    *TokenNumber++;\r
+\r
+    if (*TokenNumber >= PEI_LOCAL_TOKEN_NUMBER) {\r
+      *TokenNumber = 0;\r
+    }\r
+  }\r
+\r
+  //\r
+  // BugBug: Haven't implemented the portion to get Next Token for GuidSpace is not Local GuidSpace.\r
+  //\r
+\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 \r
 }\r
 \r
 \r