IN UINTN TokenNumber\r
)\r
{\r
+ UINTN TmpTokenNumber;\r
UINT32 *LocalTokenNumberTable;\r
UINT32 LocalTokenNumber;\r
UINTN Size;\r
//\r
TokenNumber--;\r
\r
+ //\r
+ // Backup the TokenNumber passed in as GetPtrTypeSize need the original TokenNumber\r
+ // \r
+ TmpTokenNumber = TokenNumber;\r
+\r
LocalTokenNumberTable = IsPeiDb ? (UINT32 *)((UINT8 *)mPcdDatabase.PeiDb + mPcdDatabase.PeiDb->LocalTokenNumberTableOffset) : \r
(UINT32 *)((UINT8 *)mPcdDatabase.DxeDb + mPcdDatabase.DxeDb->LocalTokenNumberTableOffset);\r
TokenNumber = IsPeiDb ? TokenNumber : TokenNumber - mPeiLocalTokenCount;\r
\r
if ((LocalTokenNumber & PCD_TYPE_SKU_ENABLED) == PCD_TYPE_SKU_ENABLED) {\r
if (Size == 0) {\r
- GetPtrTypeSize (TokenNumber, &MaxSize);\r
+ GetPtrTypeSize (TmpTokenNumber, &MaxSize);\r
} else {\r
MaxSize = Size;\r
}\r
case PCD_DATUM_TYPE_POINTER:\r
return EFI_PCD_TYPE_PTR;\r
case PCD_DATUM_TYPE_UINT8:\r
- if (LocalTokenNumber & PCD_DATUM_TYPE_UINT8_BOOLEAN) {\r
+ if ((LocalTokenNumber & PCD_DATUM_TYPE_UINT8_BOOLEAN) == PCD_DATUM_TYPE_UINT8_BOOLEAN) {\r
return EFI_PCD_TYPE_BOOL;\r
} else {\r
return EFI_PCD_TYPE_8;\r
// Need to get the full PCD name.\r
//\r
Name = AllocateZeroPool (AsciiStrSize (TokenSpaceName) + AsciiStrSize (PcdName));\r
+ ASSERT (Name != NULL);\r
//\r
// Catenate TokenSpaceCName and PcdCName with a '.' to form the full PCD name.\r
//\r
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
// 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
//\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
//\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
//\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