\r
if (Guid == NULL) {\r
TokenNumber = ExTokenNumber;\r
+\r
+ //\r
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
+ // We have to decrement TokenNumber by 1 to make it usable\r
+ // as the array index.\r
+ //\r
+ TokenNumber--;\r
ASSERT (TokenNumber < PEI_NEX_TOKEN_NUMBER);\r
} else {\r
TokenNumber = GetExPcdTokenNumber (Guid, ExTokenNumber);\r
+\r
+ //\r
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
+ // We have to decrement TokenNumber by 1 to make it usable\r
+ // as the array index.\r
+ //\r
+ TokenNumber--;\r
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
}\r
\r
+\r
LocalTokenNumber = GetPcdDatabase()->Init.LocalTokenNumberTable[TokenNumber];\r
\r
ASSERT ((LocalTokenNumber & PCD_TYPE_HII) == 0);\r
PCD_PPI_CALLBACK *CallbackTable;\r
UINTN Idx;\r
\r
+ //\r
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
+ // We have to decrement TokenNumber by 1 to make it usable\r
+ // as the array index.\r
+ //\r
+ TokenNumber--;\r
+ \r
if (Guid == NULL)\r
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
\r
UINTN Offset;\r
VOID *InternalData;\r
\r
+ //\r
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
+ // We have to decrement TokenNumber by 1 to make it usable\r
+ // as the array index.\r
+ //\r
+ TokenNumber--;\r
+\r
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
\r
PeiPcdDb = GetPcdDatabase ();\r
// type PCD entry in ExSetWorker.\r
//\r
if (TokenNumber < PEI_NEX_TOKEN_NUMBER) {\r
- InvokeCallbackOnSet (0, NULL, TokenNumber, Data, Size);\r
+ InvokeCallbackOnSet (0, NULL, TokenNumber + 1, Data, Size);\r
}\r
\r
if ((LocalTokenNumber & PCD_TYPE_SKU_ENABLED) == PCD_TYPE_SKU_ENABLED) {\r
UINT32 LocalTokenNumber;\r
UINTN Size;\r
\r
+ //\r
+ // TokenNumber Zero is reserved as PCD_INVALID_TOKEN_NUMBER.\r
+ // We have to decrement TokenNumber by 1 to make it usable\r
+ // as the array index.\r
+ //\r
+ TokenNumber--;\r
+\r
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
\r
- Size = PeiPcdGetSize(TokenNumber);\r
+ Size = PeiPcdGetSize(TokenNumber + 1);\r
\r
ASSERT (GetSize == Size || GetSize == 0);\r
\r
return (VOID *) ((UINT8 *) Data + VariableHead->Offset);\r
} else {\r
//\r
- // BugBug: Need to support default value. The current implementation\r
- // will return a memory buffer with ALL ZERO.\r
- // \r
- return AllocateZeroPool (Size);\r
+ // Return the default value specified by Platform Integrator \r
+ //\r
+ return (VOID *) ((UINT8 *) PeiPcdDb + VariableHead->DefaultValueOffset);\r
}\r
}\r
\r
case PCD_TYPE_DATA:\r
return (VOID *) ((UINT8 *)PeiPcdDb + Offset);\r
- break;\r
\r
case PCD_TYPE_STRING:\r
StringTableIdx = (UINT16) *((UINT8 *) PeiPcdDb + Offset);\r