Help functions used by PCD DXE driver.\r
\r
Copyright (c) 2014, Hewlett-Packard Development Company, L.P.<BR>\r
-Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
\r
PCD_DATABASE mPcdDatabase;\r
\r
-UINT32 mPcdTotalTokenCount; \r
-UINT32 mPeiLocalTokenCount; \r
-UINT32 mDxeLocalTokenCount; \r
-UINT32 mPeiNexTokenCount; \r
-UINT32 mDxeNexTokenCount; \r
+UINT32 mPcdTotalTokenCount;\r
+UINT32 mPeiLocalTokenCount;\r
+UINT32 mDxeLocalTokenCount;\r
+UINT32 mPeiNexTokenCount;\r
+UINT32 mDxeNexTokenCount;\r
UINT32 mPeiExMapppingTableSize;\r
UINT32 mDxeExMapppingTableSize;\r
UINT32 mPeiGuidTableSize;\r
UINT32 mDxeGuidTableSize;\r
\r
-BOOLEAN mPeiExMapTableEmpty; \r
-BOOLEAN mDxeExMapTableEmpty; \r
+BOOLEAN mPeiExMapTableEmpty;\r
+BOOLEAN mDxeExMapTableEmpty;\r
BOOLEAN mPeiDatabaseEmpty;\r
\r
LIST_ENTRY *mCallbackFnTable;\r
EFI_GUID **TmpTokenSpaceBuffer;\r
-UINTN TmpTokenSpaceBufferCount; \r
+UINTN TmpTokenSpaceBufferCount;\r
\r
UINTN mPeiPcdDbSize = 0;\r
PEI_PCD_DATABASE *mPeiPcdDbBinary = NULL;\r
//\r
TokenNumber--;\r
\r
- LocalTokenNumberTable = IsPeiDb ? (UINT32 *)((UINT8 *)mPcdDatabase.PeiDb + mPcdDatabase.PeiDb->LocalTokenNumberTableOffset) : \r
+ LocalTokenNumberTable = IsPeiDb ? (UINT32 *)((UINT8 *)mPcdDatabase.PeiDb + mPcdDatabase.PeiDb->LocalTokenNumberTableOffset) :\r
(UINT32 *)((UINT8 *)mPcdDatabase.DxeDb + mPcdDatabase.DxeDb->LocalTokenNumberTableOffset);\r
TokenNumber = IsPeiDb ? TokenNumber : TokenNumber - mPeiLocalTokenCount;\r
\r
CHAR8 *Name;\r
\r
//\r
- // Return NULL when PCD name table is absent. \r
+ // Return NULL when PCD name table is absent.\r
//\r
if (IsPeiDb) {\r
if (mPcdDatabase.PeiDb->PcdNameTableOffset == 0) {\r
//\r
AsciiStrCatS (Name, NameSize, TokenSpaceName);\r
Name[AsciiStrSize (TokenSpaceName) - sizeof (CHAR8)] = '.';\r
- AsciiStrCatS (Name, NameSize, PcdName); \r
+ AsciiStrCatS (Name, NameSize, PcdName);\r
}\r
\r
return Name;\r
@param[in] Guid The 128-bit unique value that designates the namespace from which to extract the value.\r
@param[in] TokenNumber The PCD token number.\r
@param[out] PcdInfo The returned information associated with the requested TokenNumber.\r
- The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName. \r
+ The caller is responsible for freeing the buffer that is allocated by callee for PcdInfo->PcdName.\r
\r
@retval EFI_SUCCESS The PCD information was returned successfully\r
@retval EFI_NOT_FOUND The PCD service could not find the requested token number.\r
PcdInfo->PcdSize = 0;\r
//\r
// Here use one representative in the token space to get the TokenSpaceCName.\r
- // \r
+ //\r
PcdInfo->PcdName = GetPcdName (TRUE, IsPeiDb, ExMapTable[Index].TokenNumber);\r
return EFI_SUCCESS;\r
} else if (ExMapTable[Index].ExTokenNumber == TokenNumber) {\r
\r
/**\r
Get the PCD entry pointer in PCD database.\r
- \r
+\r
This routine will visit PCD database to find the PCD entry according to given\r
- token number. The given token number is autogened by build tools and it will be \r
- translated to local token number. Local token number contains PCD's type and \r
+ token number. The given token number is autogened by build tools and it will be\r
+ translated to local token number. Local token number contains PCD's type and\r
offset of PCD entry in PCD database.\r
\r
@param TokenNumber Token's number, it is autogened by build tools\r
EFI_STATUS Status;\r
UINT32 LocalTokenNumber;\r
UINT32 Offset;\r
- STRING_HEAD StringTableIdx; \r
+ STRING_HEAD StringTableIdx;\r
BOOLEAN IsPeiDb;\r
\r
//\r
\r
//\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
//\r
ASSERT (TokenNumber + 1 < mPcdTotalTokenCount + 1);\r
ASSERT ((GetSize == DxePcdGetSize (TokenNumber + 1)) || (GetSize == 0));\r
\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
IsPeiDb = (BOOLEAN) ((TokenNumber + 1 < mPeiLocalTokenCount + 1) ? TRUE : FALSE);\r
\r
LocalTokenNumber = GetLocalTokenNumber (IsPeiDb, TokenNumber + 1);\r
\r
PcdDb = IsPeiDb ? ((UINT8 *) mPcdDatabase.PeiDb) : ((UINT8 *) mPcdDatabase.DxeDb);\r
- \r
+\r
if (IsPeiDb) {\r
StringTable = (UINT8 *) ((UINT8 *)mPcdDatabase.PeiDb + mPcdDatabase.PeiDb->StringTableOffset);\r
} else {\r
\r
if ((LocalTokenNumber & PCD_TYPE_ALL_SET) == (PCD_TYPE_HII|PCD_TYPE_STRING)) {\r
//\r
- // If a HII type PCD's datum type is VOID*, the DefaultValueOffset is the index of \r
+ // If a HII type PCD's datum type is VOID*, the DefaultValueOffset is the index of\r
// string array in string table.\r
//\r
- StringTableIdx = *(STRING_HEAD*)((UINT8 *) PcdDb + VariableHead->DefaultValueOffset); \r
- VaraiableDefaultBuffer = (UINT8 *) (StringTable + StringTableIdx); \r
+ StringTableIdx = *(STRING_HEAD*)((UINT8 *) PcdDb + VariableHead->DefaultValueOffset);\r
+ VaraiableDefaultBuffer = (UINT8 *) (StringTable + StringTableIdx);\r
} else {\r
VaraiableDefaultBuffer = (UINT8 *) PcdDb + VariableHead->DefaultValueOffset;\r
}\r
default:\r
ASSERT (FALSE);\r
break;\r
- \r
+\r
}\r
\r
EfiReleaseLock (&mPcdDatabaseLock);\r
\r
This routine will register a callback function to a PCD entry by given token number\r
and token space guid.\r
- \r
+\r
@param TokenNumber PCD token's number, it is autogened by build tools.\r
- @param Guid PCD token space's guid, \r
+ @param Guid PCD token space's guid,\r
if not NULL, this PCD is dynamicEx type PCD.\r
@param CallBackFunction Callback function pointer\r
\r
\r
FnTableEntry->CallbackFn = CallBackFunction;\r
InsertTailList (ListHead, &FnTableEntry->Node);\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
\r
//\r
RemoveEntryList (ListNode);\r
FreePool (FnTableEntry);\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
ListNode = GetNextNode (ListHead, ListNode);\r
\r
/**\r
Get next token number in given token space.\r
- \r
+\r
This routine is used for dynamicEx type PCD. It will firstly scan token space\r
- table to get token space according to given token space guid. Then scan given \r
- token number in found token space, if found, then return next token number in \r
+ table to get token space according to given token space guid. Then scan given\r
+ token number in found token space, if found, then return next token number in\r
this token space.\r
\r
- @param Guid Token space guid. Next token number will be scaned in \r
+ @param Guid Token space guid. Next token number will be scaned in\r
this token space.\r
- @param TokenNumber Token number. \r
- If PCD_INVALID_TOKEN_NUMBER, return first token number in \r
+ @param TokenNumber Token number.\r
+ If PCD_INVALID_TOKEN_NUMBER, return first token number in\r
token space table.\r
If not PCD_INVALID_TOKEN_NUMBER, return next token number\r
in token space table.\r
UINTN ExMapTableCount;\r
\r
//\r
- // Scan token space guid \r
- // \r
+ // Scan token space guid\r
+ //\r
MatchGuid = ScanGuid (GuidTable, SizeOfGuidTable, Guid);\r
if (MatchGuid == NULL) {\r
return EFI_NOT_FOUND;\r
DXE_PCD_DATABASE *\r
LocateExPcdBinary (\r
VOID\r
-) \r
+)\r
{\r
EFI_STATUS Status;\r
- \r
+\r
//\r
- // Search the External Pcd database from one section of current FFS, \r
+ // Search the External Pcd database from one section of current FFS,\r
// and read it to memory\r
//\r
Status = GetSectionFromFfs (\r
\r
/**\r
Initialize the PCD database in DXE phase.\r
- \r
+\r
PCD database in DXE phase also contains PCD database in PEI phase which is copied\r
from GUID Hob.\r
\r
GuidHob = GetFirstGuidHob (&gPcdDataBaseHobGuid);\r
if (GuidHob != NULL) {\r
\r
- // \r
+ //\r
// If no PEIMs use dynamic Pcd Entry, the Pcd Service PEIM\r
// should not be included at all. So the GuidHob could\r
// be NULL. If it is NULL, we just copy over the DXE Default\r
\r
mPcdTotalTokenCount = mPeiLocalTokenCount + mDxeLocalTokenCount;\r
mPeiNexTokenCount = mPeiLocalTokenCount - mPcdDatabase.PeiDb->ExTokenCount;\r
- mDxeNexTokenCount = mDxeLocalTokenCount - mPcdDatabase.DxeDb->ExTokenCount; \r
+ mDxeNexTokenCount = mDxeLocalTokenCount - mPcdDatabase.DxeDb->ExTokenCount;\r
\r
mPeiExMapTableEmpty = (mPcdDatabase.PeiDb->ExTokenCount == 0) ? TRUE : FALSE;\r
mDxeExMapTableEmpty = (mPcdDatabase.DxeDb->ExTokenCount == 0) ? TRUE : FALSE;\r
\r
//\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
//\r
for (Index = 0; Index + 1 < mPcdTotalTokenCount + 1; Index++) {\r
\r
@param VariableGuid Variable's guid\r
@param VariableName Variable's unicode name string\r
- @param VariableData Variable's data pointer, \r
+ @param VariableData Variable's data pointer,\r
@param VariableSize Variable's size.\r
\r
@return the status of gRT->GetVariable\r
\r
Size = 0;\r
Buffer = NULL;\r
- \r
+\r
//\r
// Firstly get the real size of HII variable\r
//\r
&Size,\r
Buffer\r
);\r
- \r
+\r
//\r
// Allocate buffer to hold whole variable data according to variable size.\r
//\r
*VariableSize = Size;\r
} else {\r
//\r
- // Use Default Data only when variable is not found. \r
+ // Use Default Data only when variable is not found.\r
// For other error status, correct data can't be got, and trig ASSERT().\r
//\r
ASSERT (Status == EFI_NOT_FOUND);\r
}\r
\r
/**\r
- Invoke the callback function when dynamic PCD entry was set, if this PCD entry \r
+ Invoke the callback function when dynamic PCD entry was set, if this PCD entry\r
has registered callback function.\r
\r
@param ExTokenNumber DynamicEx PCD's token number, if this PCD entry is dyanmicEx\r
while (ListNode != ListHead) {\r
FnTableEntry = CR_FNENTRY_FROM_LISTNODE (ListNode, CALLBACK_FN_ENTRY, Node);\r
\r
- FnTableEntry->CallbackFn(Guid, \r
+ FnTableEntry->CallbackFn(Guid,\r
(Guid == NULL) ? TokenNumber : ExTokenNumber,\r
Data,\r
Size);\r
- \r
+\r
ListNode = GetNextNode (ListHead, ListNode);\r
}\r
- \r
+\r
return;\r
}\r
\r
\r
@retval EFI_INVALID_PARAMETER If this PCD type is VPD, VPD PCD can not be set.\r
@retval EFI_INVALID_PARAMETER If Size can not be set to size table.\r
- @retval EFI_INVALID_PARAMETER If Size of non-Ptr type PCD does not match the size information in PCD database. \r
+ @retval EFI_INVALID_PARAMETER If Size of non-Ptr type PCD does not match the size information in PCD database.\r
@retval EFI_NOT_FOUND If value type of PCD entry is intergrate, but not in\r
range of UINT8, UINT16, UINT32, UINT64\r
- @retval EFI_NOT_FOUND Can not find the PCD type according to token number. \r
+ @retval EFI_NOT_FOUND Can not find the PCD type according to token number.\r
**/\r
EFI_STATUS\r
SetWorker (\r
TokenNumber--;\r
\r
TmpTokenNumber = TokenNumber;\r
- \r
+\r
//\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
//\r
ASSERT (TokenNumber + 1 < mPcdTotalTokenCount + 1);\r
\r
//\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
//\r
if ((TokenNumber + 1 < mPeiNexTokenCount + 1) ||\r
\r
//\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
//\r
IsPeiDb = (BOOLEAN) ((TokenNumber + 1 < mPeiLocalTokenCount + 1) ? TRUE : FALSE);\r
StringTable = (UINT8 *) ((UINT8 *)mPcdDatabase.DxeDb + mPcdDatabase.DxeDb->StringTableOffset);\r
}\r
\r
- \r
+\r
InternalData = PcdDb + Offset;\r
\r
switch (LocalTokenNumber & PCD_TYPE_ALL_SET) {\r
ASSERT (FALSE);\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
- \r
+\r
case PCD_TYPE_STRING:\r
if (SetPtrTypeSize (TmpTokenNumber, Size)) {\r
CopyMem (StringTable + *((STRING_HEAD *)InternalData), Data, *Size);\r
Attributes = VariableHead->Attributes;\r
Status = SetHiiVariable (Guid, Name, Attributes, Data, *Size, VariableOffset);\r
break;\r
- \r
+\r
case PCD_TYPE_DATA:\r
if (PtrType) {\r
if (SetPtrTypeSize (TmpTokenNumber, Size)) {\r
}\r
\r
EfiReleaseLock (&mPcdDatabaseLock);\r
- \r
+\r
return Status;\r
}\r
\r
IN CONST EFI_GUID *Guid,\r
IN UINTN ExTokenNumber,\r
IN UINTN GetSize\r
- ) \r
+ )\r
{\r
return GetWorker(GetExPcdTokenNumber (Guid, (UINT32) ExTokenNumber), GetSize);\r
}\r
\r
/**\r
Set value for a dynamic-ex PCD entry.\r
- \r
- This routine find the local token number according to dynamic-ex PCD's token \r
+\r
+ This routine find the local token number according to dynamic-ex PCD's token\r
space guid and token number firstly, and invoke callback function if this PCD\r
entry registered callback function. Finally, invoken general SetWorker to set\r
PCD value.\r
- \r
+\r
@param ExTokenNumber Dynamic-ex PCD token number.\r
@param Guid Token space guid for dynamic-ex PCD.\r
@param Data PCD value want to be set\r
)\r
{\r
UINTN TokenNumber;\r
- \r
+\r
TokenNumber = GetExPcdTokenNumber (Guid, (UINT32) ExTokenNumber);\r
\r
InvokeCallbackOnSet ((UINT32) ExTokenNumber, Guid, TokenNumber, Data, *SetSize);\r
/**\r
Set value for HII-type PCD.\r
\r
- A HII-type PCD's value is stored in a variable. Setting/Getting the value of \r
+ A HII-type PCD's value is stored in a variable. Setting/Getting the value of\r
HII-type PCD is to visit this variable.\r
- \r
+\r
@param VariableGuid Guid of variable which stored value of a HII-type PCD.\r
@param VariableName Unicode name of variable which stored value of a HII-type PCD.\r
@param SetAttributes Attributes bitmask to set for the variable.\r
&Size,\r
NULL\r
);\r
- \r
+\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
//\r
// Patch new PCD's value to offset in given HII variable.\r
&Size,\r
Buffer\r
);\r
- \r
+\r
ASSERT_EFI_ERROR (Status);\r
\r
CopyMem ((UINT8 *)Buffer + Offset, Data, DataSize);\r
);\r
\r
FreePool (Buffer);\r
- return Status; \r
+ return Status;\r
}\r
- \r
+\r
//\r
// If we drop to here, the value is failed to be written in to variable area.\r
//\r
A dynamic-ex type PCD, developer must provide pair of token space guid: token number\r
in DEC file. PCD database maintain a mapping table that translate pair of {token\r
space guid: token number} to Token Number.\r
- \r
+\r
@param Guid Token space guid for dynamic-ex PCD entry.\r
@param ExTokenNumber Dynamic-ex PCD token number.\r
\r
@return Token Number for dynamic-ex PCD.\r
\r
**/\r
-UINTN \r
+UINTN\r
GetExPcdTokenNumber (\r
IN CONST EFI_GUID *Guid,\r
IN UINT32 ExTokenNumber\r
\r
/**\r
Wrapper function of getting index of PCD entry in size table.\r
- \r
+\r
@param LocalTokenNumberTableIdx Index of this PCD in local token number table.\r
@param IsPeiDb If TRUE, the pcd entry is initialized in PEI phase,\r
If FALSE, the pcd entry is initialized in DXE phase.\r
UINTN LocalTokenNumber;\r
UINTN Index;\r
UINTN SizeTableIdx;\r
- \r
+\r
if (IsPeiDb) {\r
LocalTokenNumberTable = (UINT32 *)((UINT8 *)mPcdDatabase.PeiDb + mPcdDatabase.PeiDb->LocalTokenNumberTableOffset);\r
} else {\r
\r
if ((LocalTokenNumber & PCD_DATUM_TYPE_ALL_SET) == PCD_DATUM_TYPE_POINTER) {\r
//\r
- // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type \r
+ // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type\r
// PCD entry.\r
//\r
if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) {\r
\r
}\r
\r
- return SizeTableIdx; \r
+ return SizeTableIdx;\r
}\r
\r
/**\r
UINT32 *LocalTokenNumberTable;\r
\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx + 1 < mPeiLocalTokenCount + 1);\r
\r
LocalTokenNumber = LocalTokenNumberTable[LocalTokenNumberTableIdx];\r
\r
ASSERT ((LocalTokenNumber & PCD_DATUM_TYPE_ALL_SET) == PCD_DATUM_TYPE_POINTER);\r
- \r
+\r
SizeTableIdx = GetSizeTableIndex (LocalTokenNumberTableIdx, IsPeiDb);\r
\r
*MaxSize = SizeTable[SizeTableIdx];\r
//\r
- // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type \r
+ // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type\r
// PCD entry.\r
//\r
if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) {\r
\r
//\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
+ // between UINTN and 0 . So we add 1 in each size of the\r
// comparison.\r
//\r
IsPeiDb = (BOOLEAN) (LocalTokenNumberTableIdx + 1 < mPeiLocalTokenCount + 1);\r
LocalTokenNumber = LocalTokenNumberTable[LocalTokenNumberTableIdx];\r
\r
ASSERT ((LocalTokenNumber & PCD_DATUM_TYPE_ALL_SET) == PCD_DATUM_TYPE_POINTER);\r
- \r
+\r
SizeTableIdx = GetSizeTableIndex (LocalTokenNumberTableIdx, IsPeiDb);\r
\r
MaxSize = SizeTable[SizeTableIdx];\r
//\r
- // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type \r
+ // SizeTable only contain record for PCD_DATUM_TYPE_POINTER type\r
// PCD entry.\r
//\r
if ((LocalTokenNumber & PCD_TYPE_VPD) != 0) {\r
(*CurrentSize == MAX_ADDRESS)) {\r
*CurrentSize = MaxSize;\r
return FALSE;\r
- } \r
- \r
+ }\r
+\r
//\r
// We have only two entry for Non-Sku enabled PCD entry:\r
// 1) MAX SIZE\r
{\r
EFI_STATUS Status;\r
PCD_DATABASE_INIT *Database;\r
- UINT32 LocalTokenCount; \r
+ UINT32 LocalTokenCount;\r
UINTN TokenNumber;\r
UINT32 LocalTokenNumber;\r
UINTN Offset;\r