/** @file\r
-Private functions used by PCD DXE driver.s\r
+Private functions used by PCD DXE driver.\r
\r
Copyright (c) 2006, Intel Corporation\r
All rights reserved. This program and the accompanying materials\r
#include "Service.h"\r
\r
\r
-//\r
-// Build Tool will generate DXE_PCD_DB_INIT_VALUE in Autogen.h\r
-// Compression Algorithm will take care of the size optimization.\r
-//\r
-\r
PCD_DATABASE * mPcdDatabase;\r
\r
LIST_ENTRY *mCallbackFnTable;\r
\r
TmpTokenNumber = TokenNumber;\r
\r
- ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);\r
+ //\r
+ // PCD_TOTAL_TOKEN_NUMBER is a auto-generated constant.\r
+ // It could be zero. EBC compiler is very choosy. It may\r
+ // report warning. So we add 1 in each size of the \r
+ // comparison.\r
+ //\r
+ ASSERT (TokenNumber + 1 < PCD_TOTAL_TOKEN_NUMBER + 1);\r
\r
ASSERT ((GetSize == DxePcdGetSize (TokenNumber + 1)) || (GetSize == 0));\r
\r
- \r
- IsPeiDb = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TRUE : FALSE;\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ IsPeiDb = (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1) ? TRUE : FALSE;\r
\r
LocalTokenNumberTable = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable : \r
mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;\r
Name = &(StringTable[VariableHead->StringIndex]);\r
VaraiableDefaultBuffer = (UINT8 *) PcdDb + VariableHead->DefaultValueOffset;\r
\r
- Status = GetHiiVariable (Guid, Name, (VOID*)&Data, &DataSize);\r
+ Status = GetHiiVariable (Guid, Name, &Data, &DataSize);\r
if (Status == EFI_SUCCESS) {\r
if (GetSize == 0) {\r
//\r
// It is a pointer type. So get the MaxSize reserved for\r
// this PCD entry.\r
//\r
- GetPtrTypeSize (TokenNumber, &GetSize);\r
+ GetPtrTypeSize (TmpTokenNumber, &GetSize);\r
}\r
CopyMem (VaraiableDefaultBuffer, Data + VariableHead->Offset, GetSize);\r
FreePool (Data);\r
\r
\r
\r
-UINTN \r
+EFI_STATUS\r
ExGetNextTokeNumber (\r
- IN CONST EFI_GUID *Guid,\r
- IN UINTN TokenNumber,\r
- IN EFI_GUID *GuidTable,\r
- IN UINTN SizeOfGuidTable,\r
- IN DYNAMICEX_MAPPING *ExMapTable,\r
- IN UINTN SizeOfExMapTable\r
+ IN CONST EFI_GUID *Guid,\r
+ IN OUT UINTN *TokenNumber,\r
+ IN EFI_GUID *GuidTable,\r
+ IN UINTN SizeOfGuidTable,\r
+ IN DYNAMICEX_MAPPING *ExMapTable,\r
+ IN UINTN SizeOfExMapTable\r
)\r
{\r
EFI_GUID *MatchGuid;\r
\r
MatchGuid = ScanGuid (GuidTable, SizeOfGuidTable, Guid);\r
if (MatchGuid == NULL) {\r
- return PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_NOT_FOUND;\r
}\r
\r
Found = FALSE;\r
}\r
\r
if (Found) {\r
- if (TokenNumber == PCD_INVALID_TOKEN_NUMBER) {\r
- return ExMapTable[Idx].ExTokenNumber;\r
+ if (*TokenNumber == PCD_INVALID_TOKEN_NUMBER) {\r
+ *TokenNumber = ExMapTable[Idx].ExTokenNumber;\r
+ return EFI_SUCCESS;\r
}\r
\r
for ( ; Idx < SizeOfExMapTable; Idx++) {\r
- if (ExMapTable[Idx].ExTokenNumber == TokenNumber) {\r
+ if (ExMapTable[Idx].ExTokenNumber == *TokenNumber) {\r
Idx++;\r
if (Idx == SizeOfExMapTable) {\r
//\r
// Exceed the length of ExMap Table\r
//\r
- return PCD_INVALID_TOKEN_NUMBER;\r
+ *TokenNumber = PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_SUCCESS;\r
} else if (ExMapTable[Idx].ExGuidIndex == GuidTableIdx) {\r
//\r
// Found the next match\r
//\r
- return ExMapTable[Idx].ExTokenNumber;\r
+ *TokenNumber = ExMapTable[Idx].ExTokenNumber;\r
+ return EFI_SUCCESS;\r
} else {\r
//\r
// Guid has been changed. It is the next Token Space Guid.\r
// We should flag no more TokenNumber.\r
//\r
- return PCD_INVALID_TOKEN_NUMBER;\r
+ *TokenNumber = PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_SUCCESS;\r
}\r
}\r
}\r
}\r
\r
- return PCD_INVALID_TOKEN_NUMBER;\r
+ return EFI_NOT_FOUND;\r
}\r
\r
\r
ASSERT (mPcdDatabase != NULL);\r
\r
GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
-\r
if (GuidHob != NULL) {\r
\r
//\r
// Initialized the Callback Function Table\r
//\r
\r
- if (PCD_TOTAL_TOKEN_NUMBER != 0) {\r
- mCallbackFnTable = AllocateZeroPool (PCD_TOTAL_TOKEN_NUMBER * sizeof (LIST_ENTRY));\r
- }\r
+ mCallbackFnTable = AllocateZeroPool (PCD_TOTAL_TOKEN_NUMBER * sizeof (LIST_ENTRY));\r
\r
- for (Idx = 0; Idx < PCD_TOTAL_TOKEN_NUMBER; Idx++) {\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ for (Idx = 0; Idx + 1 < PCD_TOTAL_TOKEN_NUMBER + 1; Idx++) {\r
InitializeListHead (&mCallbackFnTable[Idx]);\r
}\r
\r
GetHiiVariable (\r
IN EFI_GUID *VariableGuid,\r
IN UINT16 *VariableName,\r
- OUT VOID **VariableData,\r
+ OUT UINT8 **VariableData,\r
OUT UINTN *VariableSize\r
)\r
{\r
UINTN Size;\r
EFI_STATUS Status;\r
- VOID *Buffer;\r
+ UINT8 *Buffer;\r
\r
Size = 0;\r
Buffer = NULL;\r
\r
- Status = EfiGetVariable (\r
+ Status = gRT->GetVariable (\r
(UINT16 *)VariableName,\r
VariableGuid,\r
NULL,\r
);\r
\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
- Buffer = AllocatePool (Size);\r
+ Buffer = (UINT8 *) AllocatePool (Size);\r
\r
ASSERT (Buffer != NULL);\r
\r
- Status = EfiGetVariable (\r
+ Status = gRT->GetVariable (\r
VariableName,\r
VariableGuid,\r
NULL,\r
\r
TmpTokenNumber = TokenNumber;\r
\r
- ASSERT (TokenNumber < PCD_TOTAL_TOKEN_NUMBER);\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+\r
+ ASSERT (TokenNumber + 1 < PCD_TOTAL_TOKEN_NUMBER + 1);\r
\r
if (!PtrType) {\r
ASSERT (*Size == DxePcdGetSize (TokenNumber + 1));\r
}\r
\r
- IsPeiDb = (TokenNumber < PEI_LOCAL_TOKEN_NUMBER) ? TRUE : FALSE;\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ IsPeiDb = (TokenNumber + 1 < PEI_LOCAL_TOKEN_NUMBER + 1) ? TRUE : FALSE;\r
\r
LocalTokenNumberTable = IsPeiDb ? mPcdDatabase->PeiDb.Init.LocalTokenNumberTable : \r
mPcdDatabase->DxeDb.Init.LocalTokenNumberTable;\r
\r
- if ((TokenNumber < PEI_NEX_TOKEN_NUMBER) ||\r
- (TokenNumber >= PEI_LOCAL_TOKEN_NUMBER || TokenNumber < (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER))) {\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ if ((TokenNumber + 1 < PEI_NEX_TOKEN_NUMBER + 1) ||\r
+ (TokenNumber + 1 >= PEI_LOCAL_TOKEN_NUMBER + 1 || TokenNumber + 1 < (PEI_LOCAL_TOKEN_NUMBER + DXE_NEX_TOKEN_NUMBER + 1))) {\r
InvokeCallbackOnSet (0, NULL, TokenNumber + 1, Data, *Size);\r
}\r
\r
return EFI_INVALID_PARAMETER;\r
\r
case PCD_TYPE_STRING:\r
- if (SetPtrTypeSize (TokenNumber, Size)) {\r
+ if (SetPtrTypeSize (TmpTokenNumber, Size)) {\r
CopyMem (&StringTable[*((UINT16 *)InternalData)], Data, *Size);\r
return EFI_SUCCESS;\r
} else {\r
\r
case PCD_TYPE_HII:\r
if (PtrType) {\r
- if (!SetPtrTypeSize (TokenNumber, Size)) {\r
+ if (!SetPtrTypeSize (TmpTokenNumber, Size)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
}\r
return Status;\r
}\r
\r
- //\r
- // Bug Bug: Please implement this\r
- //\r
-\r
case PCD_TYPE_DATA:\r
if (PtrType) {\r
- if (SetPtrTypeSize (TokenNumber, Size)) {\r
+ if (SetPtrTypeSize (TmpTokenNumber, Size)) {\r
CopyMem (InternalData, Data, *Size);\r
return EFI_SUCCESS;\r
} else {\r
\r
Size = 0;\r
\r
- Status = EfiGetVariable (\r
+ Status = gRT->GetVariable (\r
(UINT16 *)VariableName,\r
VariableGuid,\r
- &Attribute,\r
+ NULL,\r
&Size,\r
NULL\r
);\r
\r
ASSERT (Buffer != NULL);\r
\r
- Status = EfiGetVariable (\r
+ Status = gRT->GetVariable (\r
VariableName,\r
VariableGuid,\r
&Attribute,\r
\r
CopyMem ((UINT8 *)Buffer + Offset, Data, DataSize);\r
\r
- Status = EfiSetVariable (\r
+ Status = gRT->SetVariable (\r
VariableName,\r
VariableGuid,\r
Attribute,\r
BOOLEAN IsPeiDb;\r
UINT32 *LocalTokenNumberTable;\r
\r
- IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx < PEI_LOCAL_TOKEN_NUMBER);\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx + 1 < PEI_LOCAL_TOKEN_NUMBER + 1);\r
\r
\r
if (IsPeiDb) {\r
BOOLEAN IsPeiDb;\r
UINT32 *LocalTokenNumberTable;\r
\r
- IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx < PEI_LOCAL_TOKEN_NUMBER);\r
+ // EBC compiler is very choosy. It may report warning about comparison\r
+ // between UINTN and 0 . So we add 1 in each size of the \r
+ // comparison.\r
+ IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx + 1 < PEI_LOCAL_TOKEN_NUMBER + 1);\r
\r
if (IsPeiDb) {\r
LocalTokenNumberTable = mPcdDatabase->PeiDb.Init.LocalTokenNumberTable;\r