\r
**/\r
\r
-#include "../Common/PcdCommon.h"\r
#include "Service.h"\r
\r
\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
+\r
+ //\r
+ // Make sure the Pcd Protocol is not already installed in the system\r
+ //\r
+ \r
+ ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gPcdProtocolGuid);\r
\r
- InitPcdDxeDataBase ();\r
+ BuildPcdDxeDataBase ();\r
+\r
+ //\r
+ // BugBug Check if PcdDatabase is already installed.\r
+ //\r
\r
Status = gBS->InstallProtocolInterface (\r
&NewHandle,\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetSku (\r
- IN UINTN SkuId\r
+ IN UINTN SkuId\r
)\r
{\r
- return DxeSetSku(SkuId);\r
+ return gPcdDatabase->PeiDb.Init.SystemSkuId = (SKU_ID) SkuId;\r
}\r
\r
\r
UINT8\r
EFIAPI\r
DxePcdGet8 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGet8Ex (NULL, TokenNumber);\r
+ ASSERT (sizeof (UINT8) == DxePcdGetSize (TokenNumber));\r
+ \r
+ return *((UINT8 *) GetWorker (TokenNumber));\r
}\r
\r
\r
UINT16\r
EFIAPI\r
DxePcdGet16 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGet16Ex (NULL, TokenNumber);\r
+ ASSERT (sizeof (UINT16) == DxePcdGetSize (TokenNumber));\r
+ \r
+ return ReadUnaligned16 (GetWorker (TokenNumber));\r
}\r
\r
\r
UINT32\r
EFIAPI\r
DxePcdGet32 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGet32Ex (NULL, TokenNumber);\r
+ ASSERT (sizeof (UINT32) == DxePcdGetSize (TokenNumber));\r
+ \r
+ return ReadUnaligned32 (GetWorker (TokenNumber));\r
}\r
\r
\r
UINT64\r
EFIAPI\r
DxePcdGet64 (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGet32Ex (NULL, TokenNumber);\r
+ ASSERT (sizeof (UINT64) == DxePcdGetSize (TokenNumber));\r
+ \r
+ return ReadUnaligned64(GetWorker (TokenNumber));\r
}\r
\r
\r
VOID *\r
EFIAPI\r
DxePcdGetPtr (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGetPtrEx (NULL, TokenNumber);\r
+ return GetWorker (TokenNumber);\r
}\r
\r
\r
BOOLEAN\r
EFIAPI\r
DxePcdGetBool (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGetBoolEx (NULL, TokenNumber);\r
+ ASSERT (sizeof (BOOLEAN) == DxePcdGetSize (TokenNumber));\r
+ \r
+ return *((BOOLEAN *) GetWorker (TokenNumber));\r
}\r
\r
\r
UINTN\r
EFIAPI\r
DxePcdGetSize (\r
- IN UINTN TokenNumber\r
+ IN UINTN TokenNumber\r
)\r
{\r
- return DxePcdGetSizeEx (NULL, TokenNumber);\r
+ UINT16 * SizeTable;\r
+\r
+ SizeTable = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? gPcdDatabase->PeiDb.Init.SizeTable :\r
+ gPcdDatabase->DxeDb.Init.SizeTable;\r
+\r
+\r
+ TokenNumber = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TokenNumber : (TokenNumber - PEI_LOCAL_TOKEN_NUMBER);\r
+\r
+ return SizeTable[TokenNumber];\r
}\r
\r
\r
UINT8\r
EFIAPI\r
DxePcdGet8Ex (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN CONST EFI_GUID *Guid,\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT8 Data;\r
-\r
- DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Data);\r
-\r
- return Data;\r
+ return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT8)));\r
}\r
\r
\r
EFIAPI\r
DxePcdGet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT16 Data;\r
-\r
- DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Data);\r
-\r
- return Data;\r
+ return *((UINT16 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT16)));\r
}\r
\r
\r
EFIAPI\r
DxePcdGet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT32 Data;\r
-\r
- DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Data);\r
-\r
- return Data;\r
+ return *((UINT32 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT32)));\r
}\r
\r
\r
EFIAPI\r
DxePcdGet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT64 Data;\r
-\r
- DxeGetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Data);\r
-\r
- return Data;\r
+ //\r
+ // BugBug: Must be changed to ReadUnaligned64\r
+ //\r
+ return *((UINT64 *) ExGetWorker (Guid, ExTokenNumber, sizeof(UINT64)));\r
}\r
\r
\r
EFIAPI\r
DxePcdGetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- VOID *Data;\r
-\r
- DxeGetPcdEntryWorker (TokenNumber, Guid, PcdPointer, &Data);\r
-\r
- return Data;\r
+ return ExGetWorker (Guid, ExTokenNumber, 0);\r
}\r
\r
\r
EFIAPI\r
DxePcdGetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- BOOLEAN Data;\r
- DxeGetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Data);\r
- return Data;\r
+ return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof(BOOLEAN)));\r
}\r
\r
\r
EFIAPI\r
DxePcdGetSizeEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- return DxeGetPcdEntrySizeWorker (TokenNumber, Guid);\r
+ EX_PCD_ENTRY_ATTRIBUTE Attr;\r
+ \r
+ GetExPcdTokenAttributes (Guid, ExTokenNumber, &Attr);\r
+\r
+ return Attr.Size;\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet8 (\r
- IN UINTN TokenNumber,\r
- IN UINT8 Value\r
+ IN UINTN TokenNumber,\r
+ IN UINT8 Value\r
)\r
{\r
- return DxePcdSet8Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet16 (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT16 Value\r
)\r
{\r
- return DxePcdSet16Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet32 (\r
- IN UINTN TokenNumber,\r
+ IN UINTN TokenNumber,\r
IN UINT32 Value\r
)\r
{\r
- return DxePcdSet32Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSet64 (\r
- IN UINTN TokenNumber,\r
- IN UINT64 Value\r
+ IN UINTN TokenNumber,\r
+ IN UINT64 Value\r
)\r
{\r
- return DxePcdSet64Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetPtr (\r
- IN UINTN TokenNumber,\r
- IN CONST VOID *Value\r
+ IN UINTN TokenNumber,\r
+ IN CONST VOID *Value\r
)\r
{\r
- return DxePcdSetPtrEx (NULL, TokenNumber, Value);\r
+ //\r
+ // BugBug, please change the Size to Input size when sync with spec\r
+ //\r
+ //ASSERT (sizeof (Value) == DxePcdGetSize (TokenNumber));\r
+\r
+ return SetWorker (TokenNumber, (VOID *)Value, DxePcdGetSize (TokenNumber), TRUE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
DxePcdSetBool (\r
- IN UINTN TokenNumber,\r
- IN BOOLEAN Value\r
+ IN UINTN TokenNumber,\r
+ IN BOOLEAN Value\r
)\r
{\r
- return DxePcdSetBoolEx (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
EFIAPI\r
DxePcdSet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
- IN UINT8 Value\r
+ IN UINTN ExTokenNumber,\r
+ IN UINT8 Value\r
)\r
{\r
- return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Value);\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ &Value, \r
+ sizeof (Value), \r
+ FALSE\r
+ );\r
}\r
\r
\r
EFIAPI\r
DxePcdSet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT16 Value\r
)\r
{\r
- return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Value);\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ &Value, \r
+ sizeof (Value), \r
+ FALSE\r
+ );\r
}\r
\r
\r
EFIAPI\r
DxePcdSet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT32 Value\r
)\r
{\r
- return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Value);\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ &Value, \r
+ sizeof (Value), \r
+ FALSE\r
+ );\r
}\r
\r
\r
EFIAPI\r
DxePcdSet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT64 Value\r
)\r
{\r
- return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Value);\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ &Value, \r
+ sizeof (Value), \r
+ FALSE\r
+ );\r
}\r
\r
\r
EFIAPI\r
DxePcdSetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN CONST VOID *Value\r
)\r
{\r
- return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdPointer, Value);\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ (VOID *) Value, \r
+ sizeof (Value), \r
+ TRUE\r
+ );\r
}\r
\r
\r
EFIAPI\r
DxePcdSetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN BOOLEAN Value\r
)\r
{\r
- return DxeSetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Value);\r
-\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ &Value, \r
+ sizeof (Value), \r
+ TRUE\r
+ );\r
}\r
\r
\r