]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Dxe/Pcd.c
Check in the Pcd service Driver/PEIM according to the new way of generating PCD Database
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Dxe / Pcd.c
index 4ed7eb0cd02e37e0bd0e9dbfabb6249925fd9e09..20fd4a15b56566ab818787dbb20eb8b5ead64eab 100644 (file)
@@ -15,7 +15,6 @@ Module Name: Pcd.c
 \r
 **/\r
 \r
-#include "../Common/PcdCommon.h"\r
 #include "Service.h"\r
 \r
 \r
@@ -70,9 +69,19 @@ PcdDxeInit (
   IN EFI_SYSTEM_TABLE     *SystemTable\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
+  EFI_STATUS          Status;\r
+\r
+  //\r
+  // Make sure the Pcd Protocol is not already installed in the system\r
+  //\r
+  \r
+  ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gPcdProtocolGuid);\r
   \r
-  InitPcdDxeDataBase ();\r
+  BuildPcdDxeDataBase ();\r
+\r
+  //\r
+  // BugBug Check if PcdDatabase is already installed.\r
+  //\r
   \r
   Status = gBS->InstallProtocolInterface (\r
                   &NewHandle,\r
@@ -91,10 +100,10 @@ PcdDxeInit (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetSku (\r
-  IN  UINTN                  SkuId\r
+  IN  UINTN        SkuId\r
   )\r
 {\r
-  return DxeSetSku(SkuId);\r
+  return gPcdDatabase->PeiDb.Init.SystemSkuId = (SKU_ID) SkuId;\r
 }\r
 \r
 \r
@@ -102,10 +111,12 @@ DxePcdSetSku (
 UINT8\r
 EFIAPI\r
 DxePcdGet8 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN         TokenNumber\r
   )\r
 {\r
-  return DxePcdGet8Ex (NULL, TokenNumber);\r
+  ASSERT (sizeof (UINT8) == DxePcdGetSize (TokenNumber));\r
+  \r
+  return *((UINT8 *) GetWorker (TokenNumber));\r
 }\r
 \r
 \r
@@ -113,10 +124,12 @@ DxePcdGet8 (
 UINT16\r
 EFIAPI\r
 DxePcdGet16 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN         TokenNumber\r
   )\r
 {\r
-  return DxePcdGet16Ex (NULL, TokenNumber);\r
+  ASSERT (sizeof (UINT16) == DxePcdGetSize (TokenNumber));\r
+  \r
+  return ReadUnaligned16 (GetWorker (TokenNumber));\r
 }\r
 \r
 \r
@@ -124,10 +137,12 @@ DxePcdGet16 (
 UINT32\r
 EFIAPI\r
 DxePcdGet32 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN         TokenNumber\r
   )\r
 {\r
-  return DxePcdGet32Ex (NULL, TokenNumber);\r
+  ASSERT (sizeof (UINT32) == DxePcdGetSize (TokenNumber));\r
+  \r
+  return ReadUnaligned32 (GetWorker (TokenNumber));\r
 }\r
 \r
 \r
@@ -135,10 +150,12 @@ DxePcdGet32 (
 UINT64\r
 EFIAPI\r
 DxePcdGet64 (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN          TokenNumber\r
   )\r
 {\r
-  return DxePcdGet32Ex (NULL, TokenNumber);\r
+  ASSERT (sizeof (UINT64) == DxePcdGetSize (TokenNumber));\r
+  \r
+  return ReadUnaligned64(GetWorker (TokenNumber));\r
 }\r
 \r
 \r
@@ -146,10 +163,10 @@ DxePcdGet64 (
 VOID *\r
 EFIAPI\r
 DxePcdGetPtr (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN          TokenNumber\r
   )\r
 {\r
-  return DxePcdGetPtrEx (NULL, TokenNumber);\r
+  return GetWorker (TokenNumber);\r
 }\r
 \r
 \r
@@ -157,10 +174,12 @@ DxePcdGetPtr (
 BOOLEAN\r
 EFIAPI\r
 DxePcdGetBool (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN          TokenNumber\r
   )\r
 {\r
-  return DxePcdGetBoolEx (NULL, TokenNumber);\r
+  ASSERT (sizeof (BOOLEAN) == DxePcdGetSize (TokenNumber));\r
+  \r
+  return *((BOOLEAN *) GetWorker (TokenNumber));\r
 }\r
 \r
 \r
@@ -168,10 +187,18 @@ DxePcdGetBool (
 UINTN\r
 EFIAPI\r
 DxePcdGetSize (\r
-  IN UINTN  TokenNumber\r
+  IN UINTN          TokenNumber\r
   )\r
 {\r
-  return  DxePcdGetSizeEx (NULL, TokenNumber);\r
+  UINT16 * SizeTable;\r
+\r
+  SizeTable = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? gPcdDatabase->PeiDb.Init.SizeTable :\r
+                                                    gPcdDatabase->DxeDb.Init.SizeTable;\r
+\r
+\r
+  TokenNumber = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TokenNumber : (TokenNumber - PEI_LOCAL_TOKEN_NUMBER);\r
+\r
+  return SizeTable[TokenNumber];\r
 }\r
 \r
 \r
@@ -179,15 +206,11 @@ DxePcdGetSize (
 UINT8\r
 EFIAPI\r
 DxePcdGet8Ex (\r
-  IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN CONST EFI_GUID         *Guid,\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
-  UINT8 Data;\r
-\r
-  DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Data);\r
-\r
-  return Data;\r
+  return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT8)));\r
 }\r
 \r
 \r
@@ -196,14 +219,10 @@ UINT16
 EFIAPI\r
 DxePcdGet16Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN                 ExTokenNumber\r
   )\r
 {\r
-  UINT16 Data;\r
-\r
-  DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Data);\r
-\r
-  return Data;\r
+  return *((UINT16 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT16)));\r
 }\r
 \r
 \r
@@ -212,14 +231,10 @@ UINT32
 EFIAPI\r
 DxePcdGet32Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
-  UINT32 Data;\r
-\r
-  DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Data);\r
-\r
-  return Data;\r
+  return *((UINT32 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT32)));\r
 }\r
 \r
 \r
@@ -228,14 +243,13 @@ UINT64
 EFIAPI\r
 DxePcdGet64Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
-  UINT64 Data;\r
-\r
-  DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Data);\r
-\r
-  return Data;\r
+  //\r
+  // BugBug: Must be changed to ReadUnaligned64\r
+  //\r
+  return *((UINT64 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT64)));\r
 }\r
 \r
 \r
@@ -244,14 +258,10 @@ VOID *
 EFIAPI\r
 DxePcdGetPtrEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
-  VOID *Data;\r
-\r
-  DxeGetPcdEntryWorker (TokenNumber, Guid, PcdPointer, &Data);\r
-\r
-  return Data;\r
+  return ExGetWorker (Guid, ExTokenNumber, 0);\r
 }\r
 \r
 \r
@@ -260,12 +270,10 @@ BOOLEAN
 EFIAPI\r
 DxePcdGetBoolEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
-  BOOLEAN Data;\r
-  DxeGetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Data);\r
-  return Data;\r
+  return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof(BOOLEAN)));\r
 }\r
 \r
 \r
@@ -274,10 +282,14 @@ UINTN
 EFIAPI\r
 DxePcdGetSizeEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber\r
+  IN UINTN                  ExTokenNumber\r
   )\r
 {\r
-  return DxeGetPcdEntrySizeWorker (TokenNumber, Guid);\r
+  EX_PCD_ENTRY_ATTRIBUTE    Attr;\r
+  \r
+  GetExPcdTokenAttributes (Guid, ExTokenNumber, &Attr);\r
+\r
+  return Attr.Size;\r
 }\r
 \r
 \r
@@ -285,11 +297,11 @@ DxePcdGetSizeEx (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet8 (\r
-  IN UINTN  TokenNumber,\r
-  IN UINT8             Value\r
+  IN UINTN              TokenNumber,\r
+  IN UINT8              Value\r
   )\r
 {\r
-  return DxePcdSet8Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
@@ -297,11 +309,11 @@ DxePcdSet8 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet16 (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN              TokenNumber,\r
   IN UINT16             Value\r
   )\r
 {\r
-  return DxePcdSet16Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
@@ -309,11 +321,11 @@ DxePcdSet16 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet32 (\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN              TokenNumber,\r
   IN UINT32             Value\r
   )\r
 {\r
-  return DxePcdSet32Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
@@ -321,11 +333,11 @@ DxePcdSet32 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSet64 (\r
-  IN UINTN  TokenNumber,\r
-  IN UINT64            Value\r
+  IN UINTN              TokenNumber,\r
+  IN UINT64             Value\r
   )\r
 {\r
-  return DxePcdSet64Ex (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
@@ -333,11 +345,16 @@ DxePcdSet64 (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetPtr (\r
-  IN UINTN  TokenNumber,\r
-  IN CONST VOID        *Value\r
+  IN UINTN              TokenNumber,\r
+  IN CONST VOID         *Value\r
   )\r
 {\r
-  return DxePcdSetPtrEx (NULL, TokenNumber, Value);\r
+  //\r
+  // BugBug, please change the Size to Input size when sync with spec\r
+  //\r
+  //ASSERT (sizeof (Value) == DxePcdGetSize (TokenNumber));\r
+\r
+  return SetWorker (TokenNumber, (VOID *)Value, DxePcdGetSize (TokenNumber), TRUE);\r
 }\r
 \r
 \r
@@ -345,11 +362,11 @@ DxePcdSetPtr (
 EFI_STATUS\r
 EFIAPI\r
 DxePcdSetBool (\r
-  IN UINTN  TokenNumber,\r
-  IN BOOLEAN           Value\r
+  IN UINTN              TokenNumber,\r
+  IN BOOLEAN            Value\r
   )\r
 {\r
-  return DxePcdSetBoolEx (NULL, TokenNumber, Value);\r
+  return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
 }\r
 \r
 \r
@@ -358,11 +375,17 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet8Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
-  IN UINT8             Value\r
+  IN UINTN                  ExTokenNumber,\r
+  IN UINT8                  Value\r
   )\r
 {\r
-  return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
@@ -371,11 +394,17 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet16Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN  ExTokenNumber,\r
   IN UINT16            Value\r
   )\r
 {\r
-  return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
@@ -384,11 +413,17 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet32Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN  ExTokenNumber,\r
   IN UINT32             Value\r
   )\r
 {\r
-  return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
@@ -397,11 +432,17 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSet64Ex (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN  ExTokenNumber,\r
   IN UINT64            Value\r
   )\r
 {\r
-  return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              FALSE\r
+                              );\r
 }\r
 \r
 \r
@@ -410,11 +451,17 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSetPtrEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN  ExTokenNumber,\r
   IN CONST VOID        *Value\r
   )\r
 {\r
-  return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdPointer, Value);\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              (VOID *) Value, \r
+                              sizeof (Value), \r
+                              TRUE\r
+                              );\r
 }\r
 \r
 \r
@@ -423,12 +470,17 @@ EFI_STATUS
 EFIAPI\r
 DxePcdSetBoolEx (\r
   IN CONST EFI_GUID        *Guid,\r
-  IN UINTN  TokenNumber,\r
+  IN UINTN  ExTokenNumber,\r
   IN BOOLEAN           Value\r
   )\r
 {\r
-  return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Value);\r
-\r
+  return          ExSetWorker(\r
+                              ExTokenNumber, \r
+                              Guid,\r
+                              &Value, \r
+                              sizeof (Value), \r
+                              TRUE\r
+                              );\r
 }\r
 \r
 \r