MdeModulePkg Pcd DXE: Handle the case gPcdDataBaseHobGuid HOB is not present.
authorStar Zeng <star.zeng@intel.com>
Sun, 29 Dec 2013 07:14:57 +0000 (07:14 +0000)
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 29 Dec 2013 07:14:57 +0000 (07:14 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed by: Liming Gao <liming.gao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15027 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/PCD/Dxe/Pcd.c
MdeModulePkg/Universal/PCD/Dxe/Service.c

index 8a3e8cd..4828af2 100644 (file)
@@ -231,7 +231,7 @@ DxeGetPcdInfoGetSku (
   VOID\r
   )\r
 {\r
-  return mPcdDatabase.PeiDb->SystemSkuId;\r
+  return mPcdDatabase.DxeDb->SystemSkuId;\r
 }\r
 \r
 /**\r
@@ -261,7 +261,7 @@ DxePcdSetSku (
   IN  UINTN         SkuId\r
   )\r
 {\r
-  mPcdDatabase.PeiDb->SystemSkuId = (SKU_ID) SkuId;\r
+  mPcdDatabase.DxeDb->SystemSkuId = (SKU_ID) SkuId;\r
   \r
   return;\r
 }\r
index 3a41bf5..a9e1ca4 100644 (file)
@@ -774,6 +774,18 @@ BuildPcdDxeDataBase (
   UINT32              PcdDxeDbLen;\r
   VOID                *PcdDxeDb;\r
 \r
+  //\r
+  // Assign PCD Entries with default value to PCD DATABASE\r
+  //\r
+  mPcdDatabase.DxeDb = LocateExPcdBinary ();\r
+  ASSERT(mPcdDatabase.DxeDb != NULL);\r
+  PcdDxeDbLen = mPcdDatabase.DxeDb->Length + mPcdDatabase.DxeDb->UninitDataBaseSize;\r
+  PcdDxeDb = AllocateZeroPool (PcdDxeDbLen);\r
+  ASSERT (PcdDxeDb != NULL);\r
+  CopyMem (PcdDxeDb, mPcdDatabase.DxeDb, mPcdDatabase.DxeDb->Length);\r
+  FreePool (mPcdDatabase.DxeDb);\r
+  mPcdDatabase.DxeDb = PcdDxeDb;\r
+\r
   GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
   if (GuidHob != NULL) {\r
 \r
@@ -789,20 +801,15 @@ BuildPcdDxeDataBase (
     // Assign PCD Entries refereneced in PEI phase to PCD DATABASE\r
     //\r
     mPcdDatabase.PeiDb = PeiDatabase;\r
+    //\r
+    // Inherit the SystemSkuId from PEI phase.\r
+    //\r
+    mPcdDatabase.DxeDb->SystemSkuId = mPcdDatabase.PeiDb->SystemSkuId;\r
+  } else {\r
+    mPcdDatabase.PeiDb = AllocateZeroPool (sizeof (PEI_PCD_DATABASE));\r
+    ASSERT(mPcdDatabase.PeiDb != NULL);\r
   }\r
 \r
-  //\r
-  // Assign PCD Entries with default value to PCD DATABASE\r
-  //\r
-  mPcdDatabase.DxeDb = LocateExPcdBinary ();\r
-  ASSERT(mPcdDatabase.DxeDb != NULL);\r
-  PcdDxeDbLen = mPcdDatabase.DxeDb->Length + mPcdDatabase.DxeDb->UninitDataBaseSize;\r
-  PcdDxeDb = AllocateZeroPool (PcdDxeDbLen);\r
-  ASSERT (PcdDxeDb != NULL);\r
-  CopyMem (PcdDxeDb, mPcdDatabase.DxeDb, mPcdDatabase.DxeDb->Length);\r
-  FreePool (mPcdDatabase.DxeDb);\r
-  mPcdDatabase.DxeDb = PcdDxeDb;\r
-\r
   //\r
   // Initialized the external PCD database local variables\r
   //\r
@@ -945,7 +952,7 @@ GetSkuEnabledTokenNumber (
   //\r
   FoundSku = FALSE;\r
   for (Index = 0; Index < SkuIdTable[0]; Index++) {\r
-    if (mPcdDatabase.PeiDb->SystemSkuId == SkuIdTable[Index + 1]) {\r
+    if (mPcdDatabase.DxeDb->SystemSkuId == SkuIdTable[Index + 1]) {\r
       FoundSku = TRUE;\r
       break;\r
     }\r
@@ -1704,7 +1711,7 @@ GetPtrTypeSize (
       //\r
       SkuIdTable = GetSkuIdArray (LocalTokenNumberTableIdx, IsPeiDb);\r
       for (Index = 0; Index < SkuIdTable[0]; Index++) {\r
-        if (SkuIdTable[1 + Index] == mPcdDatabase.PeiDb->SystemSkuId) {\r
+        if (SkuIdTable[1 + Index] == mPcdDatabase.DxeDb->SystemSkuId) {\r
           return SizeTable[SizeTableIdx + 1 + Index];\r
         }\r
       }\r
@@ -1794,7 +1801,7 @@ SetPtrTypeSize (
       //\r
       SkuIdTable = GetSkuIdArray (LocalTokenNumberTableIdx, IsPeiDb);\r
       for (Index = 0; Index < SkuIdTable[0]; Index++) {\r
-        if (SkuIdTable[1 + Index] == mPcdDatabase.PeiDb->SystemSkuId) {\r
+        if (SkuIdTable[1 + Index] == mPcdDatabase.DxeDb->SystemSkuId) {\r
           SizeTable[SizeTableIdx + 1 + Index] = (SIZE_INFO) *CurrentSize;\r
           return TRUE;\r
         }\r