-/** @file\r
-PCD PEIM\r
+/** @file PCD PEIM\r
\r
Copyright (c) 2006, Intel Corporation \r
All rights reserved. This program and the accompanying materials \r
\r
**/\r
\r
-#include "../Common/PcdCommon.h"\r
+#include "PcdCommon.h"\r
#include "Service.h"\r
\r
\r
)\r
{\r
EFI_STATUS Status;\r
- UINT8 *PcdImage;\r
-\r
- PcdImage = (UINT8 *) LocatePcdImage ();\r
-\r
- BuildPcdDatabase (PcdImage);\r
\r
+ BuildPcdDatabase ();\r
+ \r
Status = PeiCoreInstallPpi (&mPpiPCD);\r
\r
ASSERT_EFI_ERROR (Status);\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSetSku (\r
IN UINTN SkuId\r
)\r
{\r
- PCD_DATABASE *Database;\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
\r
- GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
- ASSERT (GuidHob != NULL);\r
- \r
- Database = (PCD_DATABASE *) GET_GUID_HOB_DATA (GuidHob);\r
-\r
- Database->Info.SkuId = SkuId;\r
+ GetPcdDatabase()->Init.SystemSkuId = (SKU_ID) SkuId;\r
\r
- return SkuId;\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGet8Ex (NULL, TokenNumber);\r
+ return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8)));\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGet16Ex (NULL, TokenNumber);\r
+ return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16)));\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGet32Ex (NULL, TokenNumber);\r
+ return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32)));\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGet64Ex (NULL, TokenNumber);\r
+ return ReadUnaligned64 (GetWorker (TokenNumber, sizeof (UINT64)));\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGetPtrEx (NULL, TokenNumber);\r
+ return GetWorker (TokenNumber, 0);\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGetBoolEx (NULL, TokenNumber);\r
+ return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN)));\r
}\r
\r
\r
IN UINTN TokenNumber\r
)\r
{\r
- return PeiPcdGetSizeEx (NULL, TokenNumber);\r
+ ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
+\r
+ return GetPcdDatabase()->Init.SizeTable[TokenNumber];\r
}\r
\r
\r
EFIAPI\r
PeiPcdGet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT8 Data;\r
- \r
- PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte8, &Data);\r
- \r
- return Data;\r
+ return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof (UINT8)));\r
}\r
\r
\r
EFIAPI\r
PeiPcdGet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT16 Data;\r
- \r
- PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte16, &Data);\r
- \r
- return Data;\r
+ return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT16)));\r
}\r
\r
\r
EFIAPI\r
PeiPcdGet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT32 Data;\r
- \r
- PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte32, &Data);\r
- \r
- return Data;\r
+ return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT32)));\r
}\r
\r
\r
EFIAPI\r
PeiPcdGet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- UINT64 Data;\r
- \r
- PeiGetPcdEntryWorker (TokenNumber, Guid, PcdByte64, &Data);\r
- \r
- return Data;\r
+ return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT64)));\r
}\r
\r
\r
EFIAPI\r
PeiPcdGetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- VOID *Data;\r
- \r
- PeiGetPcdEntryWorker (TokenNumber, Guid, PcdPointer, &Data);\r
- \r
- return Data;\r
+ return ExGetWorker (Guid, ExTokenNumber, 0);\r
}\r
\r
\r
EFIAPI\r
PeiPcdGetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- BOOLEAN Data;\r
- \r
- PeiGetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Data);\r
- \r
- return Data;\r
+ return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof (BOOLEAN)));\r
}\r
\r
\r
EFIAPI\r
PeiPcdGetSizeEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber\r
+ IN UINTN ExTokenNumber\r
)\r
{\r
- return PeiGetPcdEntrySizeWorker (TokenNumber, Guid);\r
+ EX_PCD_ENTRY_ATTRIBUTE Attr;\r
+\r
+ GetExPcdTokenAttributes (Guid, ExTokenNumber, &Attr);\r
+ \r
+ return Attr.Size;\r
}\r
\r
\r
IN UINT8 Value\r
)\r
{\r
- return PeiPcdSet8Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
IN UINT16 Value\r
)\r
{\r
- return PeiPcdSet16Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
IN UINT32 Value\r
)\r
{\r
- return PeiPcdSet32Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
IN UINT64 Value\r
)\r
{\r
- return PeiPcdSet64Ex (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
IN CONST VOID *Value\r
)\r
{\r
- return PeiPcdSetPtrEx (NULL, TokenNumber, Value);\r
+ //\r
+ // BugBug, please change the Size to Input size when sync with spec\r
+ //\r
+ //ASSERT (sizeof (Value) == GetPcdDatabase()->Init.SizeTable[TokenNumber]);\r
+\r
+ return SetWorker (TokenNumber, (VOID *) Value, GetPcdDatabase()->Init.SizeTable[TokenNumber], TRUE);\r
}\r
\r
\r
IN BOOLEAN Value\r
)\r
{\r
- return PeiPcdSetBoolEx (NULL, TokenNumber, Value);\r
+ return SetWorker (TokenNumber, &Value, sizeof (Value), FALSE);\r
}\r
\r
\r
EFIAPI\r
PeiPcdSet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT8 Value\r
)\r
{\r
- return PeiSetPcdEntryWorker (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
PeiPcdSet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT16 Value\r
)\r
{\r
- return PeiSetPcdEntryWorker (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
PeiPcdSet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT32 Value\r
)\r
{\r
- return PeiSetPcdEntryWorker (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
PeiPcdSet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN UINT64 Value\r
)\r
{\r
- return PeiSetPcdEntryWorker (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
PeiPcdSetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN CONST VOID *Value\r
)\r
{\r
- return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdPointer, (VOID *)Value);\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ (VOID *) Value, \r
+ sizeof (Value), \r
+ TRUE\r
+ );\r
}\r
\r
\r
EFIAPI\r
PeiPcdSetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN BOOLEAN Value\r
)\r
{\r
- return PeiSetPcdEntryWorker (TokenNumber, Guid, PcdBoolean, &Value);\r
-\r
+ return ExSetWorker(\r
+ ExTokenNumber, \r
+ Guid,\r
+ &Value, \r
+ sizeof (Value), \r
+ FALSE\r
+ );\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
PcdRegisterCallBackOnSet (\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN CONST EFI_GUID *Guid, OPTIONAL\r
IN PCD_PPI_CALLBACK CallBackFunction\r
)\r
{\r
- return PeiRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction, TRUE);\r
+ return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, TRUE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
PcdUnRegisterCallBackOnSet (\r
- IN UINTN TokenNumber,\r
+ IN UINTN ExTokenNumber,\r
IN CONST EFI_GUID *Guid, OPTIONAL\r
IN PCD_PPI_CALLBACK CallBackFunction\r
)\r
{\r
- return PeiRegisterCallBackWorker (TokenNumber, Guid, CallBackFunction, FALSE);\r
+ return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, FALSE);\r
}\r
\r
\r
IN OUT UINTN *TokenNumber\r
)\r
{\r
- return PeiGetNextTokenWorker (TokenNumber, Guid);\r
+ if (Guid == NULL) {\r
+ *TokenNumber++;\r
+\r
+ if (*TokenNumber >= PEI_LOCAL_TOKEN_NUMBER) {\r
+ *TokenNumber = 0;\r
+ }\r
+ }\r
+\r
+ //\r
+ // BugBug: Haven't implemented the portion to get Next Token for GuidSpace is not Local GuidSpace.\r
+ //\r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
\r