PeiPcdSetPtrEx, \r
PeiPcdSetBoolEx,\r
\r
- PcdRegisterCallBackOnSet,\r
+ PeiRegisterCallBackOnSet,\r
PcdUnRegisterCallBackOnSet,\r
PeiPcdGetNextToken\r
};\r
return EFI_SUCCESS;\r
}\r
\r
-EFI_STATUS\r
+VOID\r
EFIAPI\r
PeiPcdSetSku (\r
- IN UINTN SkuId\r
+ IN SKU_ID SkuId\r
)\r
{\r
\r
- GetPcdDatabase()->Init.SystemSkuId = (SKU_ID) SkuId;\r
+ GetPcdDatabase()->Init.SystemSkuId = SkuId;\r
\r
- return EFI_SUCCESS;\r
+ return;\r
}\r
\r
\r
UINT8\r
EFIAPI\r
PeiPcdGet8 (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
return *((UINT8 *) GetWorker (TokenNumber, sizeof (UINT8)));\r
UINT16\r
EFIAPI\r
PeiPcdGet16 (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
return ReadUnaligned16 (GetWorker (TokenNumber, sizeof (UINT16)));\r
UINT32\r
EFIAPI\r
PeiPcdGet32 (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
return ReadUnaligned32 (GetWorker (TokenNumber, sizeof (UINT32)));\r
UINT64\r
EFIAPI\r
PeiPcdGet64 (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
return ReadUnaligned64 (GetWorker (TokenNumber, sizeof (UINT64)));\r
VOID *\r
EFIAPI\r
PeiPcdGetPtr (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
return GetWorker (TokenNumber, 0);\r
BOOLEAN\r
EFIAPI\r
PeiPcdGetBool (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
return *((BOOLEAN *) GetWorker (TokenNumber, sizeof (BOOLEAN)));\r
UINTN\r
EFIAPI\r
PeiPcdGetSize (\r
- IN UINTN TokenNumber\r
+ IN PCD_TOKEN_NUMBER TokenNumber\r
)\r
{\r
ASSERT (TokenNumber < PEI_LOCAL_TOKEN_NUMBER);\r
EFIAPI\r
PeiPcdGet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
return *((UINT8 *) ExGetWorker (Guid, ExTokenNumber, sizeof (UINT8)));\r
EFIAPI\r
PeiPcdGet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
return ReadUnaligned16 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT16)));\r
EFIAPI\r
PeiPcdGet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
return ReadUnaligned32 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT32)));\r
EFIAPI\r
PeiPcdGet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
return ReadUnaligned64 (ExGetWorker (Guid, ExTokenNumber, sizeof (UINT64)));\r
EFIAPI\r
PeiPcdGetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
return ExGetWorker (Guid, ExTokenNumber, 0);\r
EFIAPI\r
PeiPcdGetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
return *((BOOLEAN *) ExGetWorker (Guid, ExTokenNumber, sizeof (BOOLEAN)));\r
EFIAPI\r
PeiPcdGetSizeEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber\r
)\r
{\r
EX_PCD_ENTRY_ATTRIBUTE Attr;\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSet8 (\r
- IN UINTN TokenNumber,\r
+ IN PCD_TOKEN_NUMBER TokenNumber,\r
IN UINT8 Value\r
)\r
{\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSet16 (\r
- IN UINTN TokenNumber,\r
+ IN PCD_TOKEN_NUMBER TokenNumber,\r
IN UINT16 Value\r
)\r
{\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSet32 (\r
- IN UINTN TokenNumber,\r
+ IN PCD_TOKEN_NUMBER TokenNumber,\r
IN UINT32 Value\r
)\r
{\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSet64 (\r
- IN UINTN TokenNumber,\r
+ IN PCD_TOKEN_NUMBER TokenNumber,\r
IN UINT64 Value\r
)\r
{\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSetPtr (\r
- IN UINTN TokenNumber,\r
- IN CONST VOID *Value\r
+ IN PCD_TOKEN_NUMBER TokenNumber,\r
+ IN UINTN SizeOfBuffer,\r
+ IN VOID *Buffer\r
)\r
{\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
+ return SetWorker (TokenNumber, Buffer, SizeOfBuffer, TRUE);\r
}\r
\r
\r
EFI_STATUS\r
EFIAPI\r
PeiPcdSetBool (\r
- IN UINTN TokenNumber,\r
+ IN PCD_TOKEN_NUMBER TokenNumber,\r
IN BOOLEAN Value\r
)\r
{\r
EFIAPI\r
PeiPcdSet8Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN UINT8 Value\r
)\r
{\r
EFIAPI\r
PeiPcdSet16Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN UINT16 Value\r
)\r
{\r
EFIAPI\r
PeiPcdSet32Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN UINT32 Value\r
)\r
{\r
EFIAPI\r
PeiPcdSet64Ex (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN UINT64 Value\r
)\r
{\r
EFIAPI\r
PeiPcdSetPtrEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
- IN CONST VOID *Value\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
+ IN UINTN SizeOfBuffer,\r
+ IN VOID *Value\r
)\r
{\r
return ExSetWorker(\r
ExTokenNumber, \r
Guid,\r
- (VOID *) Value, \r
- sizeof (Value), \r
+ Value, \r
+ SizeOfBuffer, \r
TRUE\r
);\r
}\r
EFIAPI\r
PeiPcdSetBoolEx (\r
IN CONST EFI_GUID *Guid,\r
- IN UINTN ExTokenNumber,\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN BOOLEAN Value\r
)\r
{\r
\r
EFI_STATUS\r
EFIAPI\r
-PcdRegisterCallBackOnSet (\r
- IN UINTN ExTokenNumber,\r
+PeiRegisterCallBackOnSet (\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN CONST EFI_GUID *Guid, OPTIONAL\r
IN PCD_PPI_CALLBACK CallBackFunction\r
)\r
{\r
+ ASSERT (CallBackFunction != NULL);\r
+ \r
return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, TRUE);\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
PcdUnRegisterCallBackOnSet (\r
- IN UINTN ExTokenNumber,\r
+ IN PCD_TOKEN_NUMBER ExTokenNumber,\r
IN CONST EFI_GUID *Guid, OPTIONAL\r
IN PCD_PPI_CALLBACK CallBackFunction\r
)\r
{\r
+ ASSERT (CallBackFunction != NULL);\r
+ \r
return PeiRegisterCallBackWorker (ExTokenNumber, Guid, CallBackFunction, FALSE);\r
}\r
\r
EFIAPI\r
PeiPcdGetNextToken (\r
IN CONST EFI_GUID *Guid, OPTIONAL\r
- IN OUT UINTN *TokenNumber\r
+ IN OUT PCD_TOKEN_NUMBER *TokenNumber\r
)\r
{\r
+ UINTN GuidTableIdx;\r
+ PEI_PCD_DATABASE *PeiPcdDb;\r
+ EFI_GUID *MatchGuid;\r
+ DYNAMICEX_MAPPING *ExMapTable;\r
+ UINTN i;\r
+ BOOLEAN Found;\r
+ \r
if (Guid == NULL) {\r
- *TokenNumber++;\r
+ (*TokenNumber)++;\r
\r
- if (*TokenNumber >= PEI_LOCAL_TOKEN_NUMBER) {\r
+ if (*TokenNumber >= PEI_NEX_TOKEN_NUMBER) {\r
*TokenNumber = 0;\r
}\r
+ \r
+ } else {\r
+\r
+ if (PEI_EXMAP_TABLE_EMPTY) {\r
+ *TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_NOT_FOUND;\r
+ }\r
+ \r
+ //\r
+ // Assume PCD Database AutoGen tool is sorting the ExMap based on the following order\r
+ // 1) ExGuid\r
+ // 2) ExTokenNumber\r
+ //\r
+ PeiPcdDb = GetPcdDatabase ();\r
+ \r
+ MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), Guid);\r
+\r
+ if (MatchGuid == NULL) {\r
+ *TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_NOT_FOUND;\r
+ }\r
+\r
+ GuidTableIdx = MatchGuid - PeiPcdDb->Init.GuidTable;\r
+\r
+ ExMapTable = PeiPcdDb->Init.ExMapTable;\r
+\r
+ Found = FALSE;\r
+ for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) {\r
+ if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {\r
+ Found = TRUE;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (Found) {\r
+ if (*TokenNumber == PCD_INVALID_TOKEN_NUMBER) {\r
+ *TokenNumber = ExMapTable[i].ExTokenNumber;\r
+ return EFI_SUCCESS;\r
+ }\r
+ \r
+ for ( ; ExMapTable[i].ExGuidIndex == GuidTableIdx; i++) {\r
+ if (ExMapTable[i].ExTokenNumber == *TokenNumber) {\r
+ i++;\r
+ if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {\r
+ *TokenNumber = ExMapTable[i].ExTokenNumber;\r
+ return EFI_SUCCESS;\r
+ } else {\r
+ *TokenNumber = (UINTN) PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_SUCCESS;\r
+ }\r
+ }\r
+ }\r
+\r
+ return EFI_NOT_FOUND;\r
+ }\r
+ \r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+EFI_GUID *\r
+EFIAPI\r
+PeiPcdGetNextTokenSpaceGuid (\r
+ IN CONST EFI_GUID *Guid\r
+ )\r
+{\r
+ UINTN GuidTableIdx;\r
+ EFI_GUID *MatchGuid;\r
+ PEI_PCD_DATABASE *PeiPcdDb;\r
+ DYNAMICEX_MAPPING *ExMapTable;\r
+ UINTN i;\r
+ BOOLEAN Found;\r
+\r
+ if (PEI_EXMAP_TABLE_EMPTY) {\r
+ return NULL;\r
}\r
\r
//\r
- // BugBug: Haven't implemented the portion to get Next Token for GuidSpace is not Local GuidSpace.\r
+ // Assume PCD Database AutoGen tool is sorting the ExMap based on the following order\r
+ // 1) ExGuid\r
+ // 2) ExTokenNumber\r
//\r
+ PeiPcdDb = GetPcdDatabase ();\r
\r
- return EFI_SUCCESS;\r
-}\r
+ MatchGuid = ScanGuid (PeiPcdDb->Init.GuidTable, sizeof(PeiPcdDb->Init.GuidTable), Guid);\r
+\r
+ if (MatchGuid == NULL) {\r
+ return NULL;\r
+ }\r
+ \r
+ GuidTableIdx = MatchGuid - PeiPcdDb->Init.GuidTable;\r
\r
+ ExMapTable = PeiPcdDb->Init.ExMapTable;\r
+\r
+ Found = FALSE;\r
+ for (i = 0; i < PEI_EXMAPPING_TABLE_SIZE; i++) {\r
+ if (ExMapTable[i].ExGuidIndex == GuidTableIdx) {\r
+ Found = TRUE;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (Found) {\r
+ for ( ; i < PEI_EXMAPPING_TABLE_SIZE; i++ ) {\r
+ if (ExMapTable[i].ExGuidIndex != GuidTableIdx ) {\r
+ if (i < PEI_EXMAPPING_TABLE_SIZE) {\r
+ return &PeiPcdDb->Init.GuidTable[ExMapTable[i].ExGuidIndex];\r
+ } else {\r
+ return NULL;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return NULL;\r
+\r
+}\r
\r