]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/PCD/Dxe/Service.c
Sync Pcd Service Driver, PEIM and library with MDE Spec 0.55a.
[mirror_edk2.git] / EdkModulePkg / Universal / PCD / Dxe / Service.c
index e1aded74f99cbed9993d58152675f07fc07f062b..8cb08dcd7c4e5a9860ddd4a70dcb6472e3712f05 100644 (file)
@@ -24,11 +24,11 @@ Module Name: Service.c
 \r
 PCD_DATABASE * mPcdDatabase;\r
 \r
-LIST_ENTRY mCallbackFnTable[PCD_TOTAL_TOKEN_NUMBER];\r
+LIST_ENTRY *mCallbackFnTable;\r
 \r
 VOID *\r
 GetWorker (\r
-  PCD_TOKEN_NUMBER  TokenNumber,\r
+  UINTN             TokenNumber,\r
   UINTN             GetSize\r
   )\r
 {\r
@@ -124,7 +124,7 @@ GetWorker (
 \r
 EFI_STATUS\r
 DxeRegisterCallBackWorker (\r
-  IN  PCD_TOKEN_NUMBER        TokenNumber,\r
+  IN  UINTN                   TokenNumber,\r
   IN  CONST GUID              *Guid, OPTIONAL\r
   IN  PCD_PROTOCOL_CALLBACK   CallBackFunction\r
 )\r
@@ -167,7 +167,7 @@ DxeRegisterCallBackWorker (
 \r
 EFI_STATUS\r
 DxeUnRegisterCallBackWorker (\r
-  IN  PCD_TOKEN_NUMBER        TokenNumber,\r
+  IN  UINTN                   TokenNumber,\r
   IN  CONST GUID              *Guid, OPTIONAL\r
   IN  PCD_PROTOCOL_CALLBACK   CallBackFunction\r
 )\r
@@ -205,10 +205,10 @@ DxeUnRegisterCallBackWorker (
 \r
 \r
 \r
-PCD_TOKEN_NUMBER\r
+UINTN           \r
 ExGetNextTokeNumber (\r
   IN CONST EFI_GUID         *Guid,\r
-  IN PCD_TOKEN_NUMBER       TokenNumber,\r
+  IN UINTN                  TokenNumber,\r
   IN EFI_GUID               *GuidTable,\r
   IN UINTN                  SizeOfGuidTable,\r
   IN DYNAMICEX_MAPPING      *ExMapTable,\r
@@ -272,7 +272,7 @@ ExGetNextTokeNumber (
 VOID\r
 BuildPcdDxeDataBase (\r
   VOID\r
-)\r
+  )\r
 {\r
   PEI_PCD_DATABASE    *PeiDatabase;\r
   EFI_HOB_GUID_TYPE   *GuidHob;\r
@@ -282,13 +282,24 @@ BuildPcdDxeDataBase (
   ASSERT (mPcdDatabase != NULL);\r
 \r
   GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
-  ASSERT (GuidHob != NULL);\r
 \r
-  PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
-  //\r
-  // Copy PCD Entries refereneced in PEI phase to PCD DATABASE\r
-  //\r
-  CopyMem (&mPcdDatabase->PeiDb, PeiDatabase, sizeof (PEI_PCD_DATABASE));\r
+  if (GuidHob != NULL) {\r
+\r
+    //\r
+    // We will copy over the PEI phase's PCD Database.\r
+    // \r
+    // If no PEIMs use dynamic Pcd Entry, the Pcd Service PEIM\r
+    // should not be included at all. So the GuidHob could\r
+    // be NULL. If it is NULL, we just copy over the DXE Default\r
+    // Value to PCD Database.\r
+    //\r
+    \r
+    PeiDatabase = (PEI_PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
+    //\r
+    // Copy PCD Entries refereneced in PEI phase to PCD DATABASE\r
+    //\r
+    CopyMem (&mPcdDatabase->PeiDb, PeiDatabase, sizeof (PEI_PCD_DATABASE));\r
+  }\r
 \r
   //\r
   // Copy PCD Entries with default value to PCD DATABASE\r
@@ -299,6 +310,11 @@ BuildPcdDxeDataBase (
   //\r
   // Initialized the Callback Function Table\r
   //\r
+\r
+  if (PCD_TOTAL_TOKEN_NUMBER != 0) {\r
+    mCallbackFnTable = AllocateZeroPool (PCD_TOTAL_TOKEN_NUMBER * sizeof (LIST_ENTRY));\r
+  }\r
+  \r
   for (Idx = 0; Idx < PCD_TOTAL_TOKEN_NUMBER; Idx++) {\r
     InitializeListHead (&mCallbackFnTable[Idx]);\r
   }\r
@@ -441,7 +457,7 @@ InvokeCallbackOnSet (
 \r
 EFI_STATUS\r
 SetWorker (\r
-  PCD_TOKEN_NUMBER        TokenNumber,\r
+  UINTN                   TokenNumber,\r
   VOID                    *Data,\r
   UINTN                   Size,\r
   BOOLEAN                 PtrType\r
@@ -576,14 +592,14 @@ ExGetWorker (
 \r
 EFI_STATUS\r
 ExSetWorker (\r
-  IN PCD_TOKEN_NUMBER     ExTokenNumber,\r
+  IN UINTN                ExTokenNumber,\r
   IN CONST EFI_GUID       *Guid,\r
   VOID                    *Data,\r
   UINTN                   SetSize,\r
   BOOLEAN                 PtrType\r
   )\r
 {\r
-  PCD_TOKEN_NUMBER        TokenNumber;\r
+  UINTN                   TokenNumber;\r
   \r
   TokenNumber = GetExPcdTokenNumber (Guid, ExTokenNumber);\r
 \r
@@ -653,10 +669,10 @@ SetHiiVariable (
 \r
 \r
 \r
-PCD_TOKEN_NUMBER\r
+UINTN           \r
 GetExPcdTokenNumber (\r
   IN CONST EFI_GUID             *Guid,\r
-  IN PCD_TOKEN_NUMBER           ExTokenNumber\r
+  IN UINTN                      ExTokenNumber\r
   )\r
 {\r
   UINT32              i;\r