IN UINTN TokenNumber\r
)\r
{\r
- UINT16 * SizeTable;\r
+ UINTN Size;\r
+ UINT32 *LocalTokenNumberTable;\r
+ BOOLEAN IsPeiDb;\r
+ UINTN MaxSize;\r
+ UINTN TmpTokenNumber;\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
+ //\r
+ // Backup the TokenNumber passed in as GetPtrTypeSize need the original TokenNumber\r
+ // \r
+ TmpTokenNumber = TokenNumber;\r
+\r
+ ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);\r
+\r
+ IsPeiDb = (BOOLEAN) (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
\r
- SizeTable = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? mPcdDatabase->PeiDb.Init.SizeTable :\r
- mPcdDatabase->DxeDb.Init.SizeTable;\r
+ TokenNumber = IsPeiDb ? TokenNumber : \r
+ (TokenNumber - PEI_LOCAL_TOKEN_NUMBER);\r
\r
+ LocalTokenNumberTable = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable \r
+ : mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;\r
\r
- TokenNumber = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TokenNumber : (TokenNumber - PEI_LOCAL_TOKEN_NUMBER);\r
+ Size = (LocalTokenNumberTable[TokenNumber] & PCD_DATUM_TYPE_ALL_SET) >> PCD_DATUM_TYPE_SHIFT;\r
+\r
+ if (Size == 0) {\r
+ //\r
+ // For pointer type, we need to scan the SIZE_TABLE to get the current size.\r
+ //\r
+ return GetPtrTypeSize (TmpTokenNumber, &MaxSize);\r
+ } else {\r
+ return Size;\r
+ }\r
\r
- return SizeTable[TokenNumber];\r
}\r
\r
\r
IN UINTN ExTokenNumber\r
)\r
{\r
- return ExGetWorker (Guid, ExTokenNumber, 0);\r
+ return ExGetWorker (Guid, ExTokenNumber, 0);\r
}\r
\r
\r
IN UINT8 Value\r
)\r
{\r
- return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
+ return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT16 Value\r
)\r
{\r
- return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
+ return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT32 Value\r
)\r
{\r
- return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
+ return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT64 Value\r
)\r
{\r
- return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
+ return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetPtr (\r
- IN UINTN TokenNumber,\r
- IN UINTN SizeOfBuffer,\r
- IN VOID *Buffer\r
+ IN UINTN TokenNumber,\r
+ IN OUT UINTN *SizeOfBuffer,\r
+ IN VOID *Buffer\r
)\r
{\r
return SetWorker (TokenNumber, Buffer, SizeOfBuffer, TRUE);\r
IN BOOLEAN Value\r
)\r
{\r
- return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
+ return SetValueWorker (TokenNumber, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT8 Value\r
)\r
{\r
- return ExSetWorker(\r
- ExTokenNumber, \r
- Guid,\r
- &Value, \r
- sizeof (Value), \r
- FALSE\r
- );\r
+ return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT16 Value\r
)\r
{\r
- return ExSetWorker(\r
- ExTokenNumber, \r
- Guid,\r
- &Value, \r
- sizeof (Value), \r
- FALSE\r
- );\r
+ return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT32 Value\r
)\r
{\r
- return ExSetWorker(\r
- ExTokenNumber, \r
- Guid,\r
- &Value, \r
- sizeof (Value), \r
- FALSE\r
- );\r
+ return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
}\r
\r
\r
IN UINT64 Value\r
)\r
{\r
- return ExSetWorker(\r
- ExTokenNumber, \r
- Guid,\r
- &Value, \r
- sizeof (Value), \r
- FALSE\r
- );\r
+ return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetPtrEx (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN UINTN SizeOfBuffer,\r
- IN VOID *Buffer\r
+ IN CONST EFI_GUID *Guid,\r
+ IN UINTN ExTokenNumber,\r
+ IN OUT UINTN *SizeOfBuffer,\r
+ IN VOID *Buffer\r
)\r
{\r
- return ExSetWorker(\r
- ExTokenNumber, \r
- Guid,\r
- Buffer, \r
- SizeOfBuffer, \r
- TRUE\r
- );\r
+ return ExSetWorker(ExTokenNumber, Guid, Buffer, SizeOfBuffer, TRUE);\r
}\r
\r
\r
IN BOOLEAN Value\r
)\r
{\r
- return ExSetWorker(\r
- ExTokenNumber, \r
- Guid,\r
- &Value, \r
- sizeof (Value), \r
- TRUE\r
- );\r
+ return ExSetValueWorker (ExTokenNumber, Guid, &Value, sizeof (Value));\r
}\r
\r
\r