+/*++\r
+Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+Module Name:\r
+ VfrUtilityLib.cpp\r
+\r
+Abstract:\r
+\r
+--*/\r
+\r
#include "stdio.h"\r
#include "stdlib.h"\r
#include "VfrUtilityLib.h"\r
}\r
\r
SConfigInfo::SConfigInfo (\r
- IN UINT8 Type, \r
- IN UINT16 Offset, \r
- IN UINT32 Width, \r
+ IN UINT8 Type,\r
+ IN UINT16 Offset,\r
+ IN UINT32 Width,\r
IN EFI_IFR_TYPE_VALUE Value\r
)\r
{\r
+ mNext = NULL;\r
mOffset = Offset;\r
mWidth = (UINT16)Width;\r
mValue = new UINT8[mWidth];\r
}\r
\r
SConfigItem::SConfigItem (\r
- IN INT8 *Id, \r
- IN INT8 *Info\r
+ IN INT8 *Name,\r
+ IN INT8 *Id\r
)\r
{\r
- mId = NULL;\r
- mInfo = NULL;\r
+ mName = NULL;\r
+ mId = NULL;\r
mInfoStrList = NULL;\r
mNext = NULL;\r
\r
- if (Id != NULL) {\r
- if ((mId = new INT8[strlen (Id) + 1]) != NULL) {\r
- strcpy (mId, Id);\r
+ if (Name != NULL) {\r
+ if ((mName = new INT8[strlen (Name) + 1]) != NULL) {\r
+ strcpy (mName, Name);\r
}\r
}\r
\r
- if (Info != NULL) {\r
- if ((mInfo = new INT8[strlen (Info) + 1]) != NULL) {\r
- strcpy (mInfo, Info);\r
+ if (Id != NULL) {\r
+ if ((mId = new INT8[strlen (Id) + 1]) != NULL) {\r
+ strcpy (mId, Id);\r
}\r
}\r
}\r
\r
SConfigItem::SConfigItem (\r
- IN INT8 *Id, \r
- IN INT8 *Info,\r
+ IN INT8 *Name,\r
+ IN INT8 *Id,\r
IN UINT8 Type,\r
IN UINT16 Offset,\r
IN UINT16 Width,\r
IN EFI_IFR_TYPE_VALUE Value\r
)\r
{\r
+ mName = NULL;\r
mId = NULL;\r
- mInfo = NULL;\r
mInfoStrList = NULL;\r
mNext = NULL;\r
\r
- if (Id != NULL) {\r
- if ((mId = new INT8[strlen (Id) + 1]) != NULL) {\r
- strcpy (mId, Id);\r
+ if (Name != NULL) {\r
+ if ((mName = new INT8[strlen (Name) + 1]) != NULL) {\r
+ strcpy (mName, Name);\r
}\r
}\r
\r
- if (Info != NULL) {\r
- if ((mInfo = new INT8[strlen (Info) + 1]) != NULL) {\r
- strcpy (mInfo, Info);\r
+ if (Id != NULL) {\r
+ if ((mId = new INT8[strlen (Id) + 1]) != NULL) {\r
+ strcpy (mId, Id);\r
}\r
}\r
\r
{\r
SConfigInfo *Info;\r
\r
+ BUFFER_SAFE_FREE (mName);\r
BUFFER_SAFE_FREE (mId);\r
- BUFFER_SAFE_FREE (mInfo);\r
while (mInfoStrList != NULL) {\r
Info = mInfoStrList;\r
mInfoStrList = mInfoStrList->mNext;\r
\r
UINT8\r
CVfrBufferConfig::Register (\r
- IN INT8 *Id, \r
- IN INT8 *Info\r
+ IN INT8 *Name,\r
+ IN INT8 *Id\r
)\r
{\r
SConfigItem *pNew;\r
\r
- if (Select (Id) == 0) {\r
+ if (Select (Name) == 0) {\r
return 1;\r
}\r
\r
- if ((pNew = new SConfigItem (Id, Info)) == NULL) {\r
+ if ((pNew = new SConfigItem (Name, Id)) == NULL) {\r
return 2;\r
}\r
if (mItemListHead == NULL) {\r
\r
UINT8\r
CVfrBufferConfig::Select (\r
- IN INT8 *Id,\r
- IN INT8 *Info\r
+ IN INT8 *Name,\r
+ IN INT8 *Id\r
)\r
{\r
SConfigItem *p;\r
\r
- if (Id == NULL) {\r
+ if (Name == NULL) {\r
mItemListPos = mItemListHead;\r
return 0;\r
} else {\r
for (p = mItemListHead; p != NULL; p = p->mNext) {\r
- if (strcmp (p->mId, Id) != 0) {\r
+ if (strcmp (p->mName, Name) != 0) {\r
continue;\r
}\r
\r
- if ((p->mInfo != NULL) && (Info != NULL)) {\r
- if (strcmp (p->mInfo, Info) != 0) {\r
+ if (Id != NULL) {\r
+ if (p->mId == NULL || strcmp (p->mId, Id) != 0) {\r
continue;\r
}\r
+ } else if (p->mId != NULL) {\r
+ continue;\r
}\r
\r
mItemListPos = p;\r
UINT8\r
CVfrBufferConfig::Write (\r
IN CONST CHAR8 Mode,\r
- IN INT8 *Id, \r
- IN INT8 *Info,\r
+ IN INT8 *Name,\r
+ IN INT8 *Id,\r
IN UINT8 Type,\r
IN UINT16 Offset,\r
IN UINT32 Width,\r
SConfigItem *pItem;\r
SConfigInfo *pInfo;\r
\r
+ if ((Ret = Select (Name)) != 0) {\r
+ return Ret;\r
+ }\r
+\r
switch (Mode) {\r
case 'a' : // add\r
- if (Select (Id) == 0) {\r
- if((pInfo = new SConfigInfo (Type, Offset, Width, Value)) == NULL) {\r
- return 2;\r
- }\r
- pInfo->mNext = mItemListPos->mInfoStrList;\r
- mItemListPos->mInfoStrList = pInfo;\r
- } else {\r
- if ((pItem = new SConfigItem (Id, Info, Type, Offset, Width, Value)) == NULL) {\r
+ if (Select (Name, Id) != 0) {\r
+ if ((pItem = new SConfigItem (Name, Id, Type, Offset, Width, Value)) == NULL) {\r
return 2;\r
}\r
if (mItemListHead == NULL) {\r
mItemListTail = pItem;\r
}\r
mItemListPos = pItem;\r
+ } else {\r
+ // tranverse the list to find out if there's already the value for the same offset\r
+ for (pInfo = mItemListPos->mInfoStrList; pInfo != NULL; pInfo = pInfo->mNext) {\r
+ if (pInfo->mOffset == Offset) {\r
+ // check if the value and width are the same; return error if not\r
+ if ((Id != NULL) && (pInfo->mWidth != Width || memcmp(pInfo->mValue, &Value, Width) != 0)) {\r
+ return VFR_RETURN_DEFAULT_VALUE_REDEFINED;\r
+ }\r
+ return 0;\r
+ }\r
+ }\r
+ if((pInfo = new SConfigInfo (Type, Offset, Width, Value)) == NULL) {\r
+ return 2;\r
+ }\r
+ pInfo->mNext = mItemListPos->mInfoStrList;\r
+ mItemListPos->mInfoStrList = pInfo;\r
}\r
break;\r
\r
case 'd' : // delete\r
- if ((Ret = Select (Id)) != 0) {\r
- return Ret;\r
- }\r
-\r
if (mItemListHead == mItemListPos) {\r
mItemListHead = mItemListPos->mNext;\r
delete mItemListPos;\r
break;\r
\r
case 'i' : // set info\r
- if ((Ret = Select (Id)) != 0) {\r
- return Ret;\r
- }\r
- if (mItemListPos->mInfo != NULL) {\r
- delete mItemListPos->mInfo;\r
+ if (mItemListPos->mId != NULL) {\r
+ delete mItemListPos->mId;\r
}\r
- mItemListPos->mInfo = NULL;\r
- if (Info != NULL) {\r
- if ((mItemListPos->mInfo = new INT8[strlen (Info) + 1]) == NULL) {\r
+ mItemListPos->mId = NULL;\r
+ if (Id != NULL) {\r
+ if ((mItemListPos->mId = new INT8[strlen (Id) + 1]) == NULL) {\r
return 2;\r
}\r
- strcpy (mItemListPos->mInfo, Info);\r
+ strcpy (mItemListPos->mId, Id);\r
}\r
break;\r
\r
#if 0\r
UINT8\r
CVfrBufferConfig::ReadId (\r
- OUT INT8 **Id, \r
- OUT INT8 **Info\r
+ OUT INT8 **Name,\r
+ OUT INT8 **Id\r
)\r
{\r
if (mInfoStrItemListPos == NULL) {\r
return 1; // end read or some error occur\r
}\r
\r
+ if (Name != NULL) {\r
+ *Name = new INT8 (strlen (mInfoStrItemListPos->mName + 1));\r
+ strcpy (*Name, mInfoStrItemListPos->mName);\r
+ }\r
if (Id != NULL) {\r
*Id = new INT8 (strlen (mInfoStrItemListPos->mId + 1));\r
strcpy (*Id, mInfoStrItemListPos->mId);\r
}\r
- if (Info != NULL) {\r
- *Info = new INT8 (strlen (mInfoStrItemListPos->mInfo + 1));\r
- strcpy (*Info, mInfoStrItemListPos->mInfo);\r
- }\r
\r
return 0;\r
}\r
\r
UINT8\r
CVfrBufferConfig::ReadInfo (\r
- IN INT8 *Id, \r
+ IN INT8 *Name,\r
IN UINT32 Index,\r
IN OUT UINT32 &Number,\r
OUT INT8 *Offset,\r
UINT32 idx;\r
UINT32 num;\r
\r
- if (Id != NULL) {\r
- if ((ret = Select (Id)) != 0) {\r
+ if (Name != NULL) {\r
+ if ((ret = Select (Name)) != 0) {\r
return ret;\r
}\r
}\r
}\r
\r
for (Item = mItemListHead; Item != NULL; Item = Item->mNext) {\r
- if (Item->mInfoStrList != NULL) {\r
- fprintf (pFile, "\nunsigned char %s%sDefault%04x[] = {", BaseName, Item->mId, Item->mInfo);\r
+ if (Item->mId != NULL || Item->mInfoStrList == NULL) {\r
+ continue;\r
+ }\r
+ fprintf (pFile, "\nunsigned char %s%sBlockName[] = {", BaseName, Item->mName);\r
+\r
+ TotalLen = sizeof (UINT32);\r
+ for (Info = Item->mInfoStrList; Info != NULL; Info = Info->mNext) {\r
+ TotalLen += sizeof (UINT16) * 2;\r
+ }\r
+ Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)&TotalLen, sizeof (UINT32));\r
+\r
+ for (Info = Item->mInfoStrList; Info != NULL; Info = Info->mNext) {\r
+ fprintf (pFile, "\n");\r
+ Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)&Info->mOffset, sizeof (UINT16));\r
+ Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)&Info->mWidth, sizeof (UINT16));\r
+ }\r
+ fprintf (pFile, "\n};\n");\r
+ }\r
+\r
+ for (Item = mItemListHead; Item != NULL; Item = Item->mNext) {\r
+ if (Item->mId != NULL && Item->mInfoStrList != NULL) {\r
+ fprintf (pFile, "\nunsigned char %s%sDefault%s[] = {", BaseName, Item->mName, Item->mId);\r
\r
TotalLen = sizeof (UINT32);\r
for (Info = Item->mInfoStrList; Info != NULL; Info = Info->mNext) {\r
Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)&TotalLen, sizeof (UINT32));\r
\r
for (Info = Item->mInfoStrList; Info != NULL; Info = Info->mNext) {\r
+ fprintf (pFile, "\n");\r
Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)&Info->mOffset, sizeof (UINT16));\r
Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)&Info->mWidth, sizeof (UINT16));\r
if (Info->mNext == NULL) {\r
} else {\r
Output.WriteLine (pFile, BYTES_PRE_LINE, " ", (INT8 *)Info->mValue, Info->mWidth);\r
}\r
- fprintf (pFile, "\n"); \r
}\r
- fprintf (pFile, "};\n"); \r
+ fprintf (pFile, "\n};\n");\r
}\r
}\r
}\r
{"UINT16", EFI_IFR_TYPE_NUM_SIZE_16, sizeof (UINT16), sizeof (UINT16)},\r
{"UINT8", EFI_IFR_TYPE_NUM_SIZE_8, sizeof (UINT8), sizeof (UINT8)},\r
{"BOOLEAN", EFI_IFR_TYPE_BOOLEAN, sizeof (BOOLEAN), sizeof (BOOLEAN)},\r
- {"EFI_HII_DATE", EFI_IFR_TYPE_DATE, sizeof (EFI_HII_DATE), sizeof (UINT8)},\r
+ {"EFI_HII_DATE", EFI_IFR_TYPE_DATE, sizeof (EFI_HII_DATE), sizeof (UINT16)},\r
{"EFI_STRING_ID", EFI_IFR_TYPE_STRING, sizeof (EFI_STRING_ID),sizeof (EFI_STRING_ID)},\r
{"EFI_HII_TIME", EFI_IFR_TYPE_TIME, sizeof (EFI_HII_TIME), sizeof (UINT8)},\r
{NULL, EFI_IFR_TYPE_OTHER, 0, 0}\r
}\r
if (c >= '0' && c <= '9') {\r
Value += (c - '0');\r
- } \r
+ }\r
}\r
\r
return Value;\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::ExtractStructTypeName (\r
- IN INT8 *&VarStr, \r
+ IN INT8 *&VarStr,\r
OUT INT8 *TName\r
)\r
{\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::ExtractFieldNameAndArrary (\r
- IN INT8 *&VarStr, \r
+ IN INT8 *&VarStr,\r
IN INT8 *FName,\r
OUT UINT32 &ArrayIdx\r
)\r
UINT32 Idx;\r
INT8 ArrayStr[MAX_NAME_LEN + 1];\r
\r
- ArrayIdx = INVALID_ARRAY_INDEX; \r
+ ArrayIdx = INVALID_ARRAY_INDEX;\r
\r
if (FName == NULL) {\r
return VFR_RETURN_FATAL_ERROR;\r
}\r
\r
while((*VarStr != '\0') &&\r
- (*VarStr != '.') && \r
- (*VarStr != '[') && \r
+ (*VarStr != '.') &&\r
+ (*VarStr != '[') &&\r
(*VarStr != ']')) {\r
*FName = *VarStr;\r
VarStr++;\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::GetTypeField (\r
- IN INT8 *FName, \r
- IN SVfrDataType *Type, \r
+ IN INT8 *FName,\r
+ IN SVfrDataType *Type,\r
OUT SVfrDataField *&Field\r
)\r
{\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::GetFieldOffset (\r
- IN SVfrDataField *Field, \r
+ IN SVfrDataField *Field,\r
IN UINT32 ArrayIdx,\r
OUT UINT32 &Offset\r
)\r
pSecondsField->mNext = NULL;\r
pSecondsField->mArrayNum = 0;\r
\r
- New->mMembers = pHoursField; \r
+ New->mMembers = pHoursField;\r
} else {\r
New->mMembers = NULL;\r
}\r
mNewDataType = NULL;\r
mCurrDataField = NULL;\r
mPackAlign = DEFAULT_PACK_ALIGN;\r
+ mPackStack = NULL;\r
\r
InternalTypesListInit ();\r
}\r
VOID\r
)\r
{\r
- SVfrDataType *pType;\r
- SVfrDataField *pField;\r
+ SVfrDataType *pType;\r
+ SVfrDataField *pField;\r
+ SVfrPackStackNode *pPack;\r
\r
if (mNewDataType != NULL) {\r
delete mNewDataType;\r
delete pType;\r
}\r
\r
+ while (mPackStack != NULL) {\r
+ pPack = mPackStack;\r
+ mPackStack = mPackStack->mNext;\r
+ delete pPack;\r
+ }\r
}\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::Pack (\r
- IN UINT32 Align\r
+ IN UINT32 LineNum,\r
+ IN UINT8 Action,\r
+ IN INT8 *Identifier,\r
+ IN UINT32 Number\r
)\r
{\r
- if (Align == 0) {\r
- return VFR_RETURN_INVALID_PARAMETER;\r
- } else if (Align > 1) {\r
- mPackAlign = Align + Align % 2;\r
- } else {\r
- mPackAlign = Align;\r
+ UINT32 PackAlign;\r
+ INT8 Msg[64] = {0, };\r
+\r
+ if (Action & VFR_PACK_SHOW) {\r
+ sprintf (Msg, "value of pragma pack(show) == %d", mPackAlign);\r
+ gCVfrErrorHandle.PrintMsg (LineNum, "", "Warning", Msg);\r
}\r
\r
- return VFR_RETURN_SUCCESS;\r
-}\r
+ if (Action & VFR_PACK_PUSH) {\r
+ SVfrPackStackNode *pNew = NULL;\r
\r
-VOID\r
-CVfrVarDataTypeDB::UnPack (\r
- VOID\r
- )\r
-{\r
- mPackAlign = DEFAULT_PACK_ALIGN;\r
+ if ((pNew = new SVfrPackStackNode (Identifier, mPackAlign)) == NULL) {\r
+ return VFR_RETURN_FATAL_ERROR;\r
+ }\r
+ pNew->mNext = mPackStack;\r
+ mPackStack = pNew;\r
+ }\r
+\r
+ if (Action & VFR_PACK_POP) {\r
+ SVfrPackStackNode *pNode = NULL;\r
+\r
+ if (mPackStack == NULL) {\r
+ gCVfrErrorHandle.PrintMsg (LineNum, "", "Warning", "#pragma pack(pop...) : more pops than pushes");\r
+ }\r
+\r
+ for (pNode = mPackStack; pNode != NULL; pNode = pNode->mNext) {\r
+ if (pNode->Match (Identifier) == TRUE) {\r
+ mPackAlign = pNode->mNumber;\r
+ mPackStack = pNode->mNext;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (Action & VFR_PACK_ASSIGN) {\r
+ PackAlign = (Number > 1) ? Number + Number % 2 : Number;\r
+ if ((PackAlign == 0) || (PackAlign > 16)) {\r
+ gCVfrErrorHandle.PrintMsg (LineNum, "", "Warning", "expected pragma parameter to be '1', '2', '4', '8', or '16'");\r
+ } else {\r
+ mPackAlign = PackAlign;\r
+ }\r
+ }\r
+\r
+ return VFR_RETURN_SUCCESS;\r
}\r
\r
VOID\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::DataTypeAddField (\r
- IN INT8 *FieldName, \r
- IN INT8 *TypeName, \r
+ IN INT8 *FieldName,\r
+ IN INT8 *TypeName,\r
IN UINT32 ArrayNum\r
)\r
{\r
mNewDataType->mMembers = pNewField;\r
pNewField->mNext = NULL;\r
} else {\r
- for (pTmp = mNewDataType->mMembers; pTmp->mNext != NULL; pTmp = pTmp->mNext) \r
+ for (pTmp = mNewDataType->mMembers; pTmp->mNext != NULL; pTmp = pTmp->mNext)\r
;\r
pTmp->mNext = pNewField;\r
pNewField->mNext = NULL;\r
return VFR_RETURN_UNDEFINED;\r
}\r
\r
+EFI_VFR_RETURN_CODE\r
+CVfrVarDataTypeDB::GetDataTypeSize (\r
+ IN UINT8 DataType,\r
+ OUT UINT32 *Size\r
+ )\r
+{\r
+ SVfrDataType *pDataType = NULL;\r
+\r
+ if (Size == NULL) {\r
+ return VFR_RETURN_FATAL_ERROR;\r
+ }\r
+\r
+ *Size = 0;\r
+ DataType = DataType & 0x0F;\r
+\r
+ //\r
+ // For user defined data type, the size can't be got by this function.\r
+ //\r
+ if (DataType == EFI_IFR_TYPE_OTHER) {\r
+ return VFR_RETURN_SUCCESS;\r
+ }\r
+\r
+ for (pDataType = mDataTypeList; pDataType != NULL; pDataType = pDataType->mNext) {\r
+ if (DataType == pDataType->mType) {\r
+ *Size = pDataType->mTotalSize;\r
+ return VFR_RETURN_SUCCESS;\r
+ }\r
+ }\r
+\r
+ return VFR_RETURN_UNDEFINED;\r
+}\r
+\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::GetDataTypeSize (\r
IN INT8 *TypeName,\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::GetDataFieldInfo (\r
- IN INT8 *VarStr, \r
- OUT UINT16 &Offset, \r
- OUT UINT8 &Type, \r
+ IN INT8 *VarStr,\r
+ OUT UINT16 &Offset,\r
+ OUT UINT8 &Type,\r
OUT UINT32 &Size\r
)\r
{\r
\r
EFI_VFR_RETURN_CODE\r
CVfrVarDataTypeDB::GetUserDefinedTypeNameList (\r
- OUT INT8 ***NameList, \r
+ OUT INT8 ***NameList,\r
OUT UINT32 *ListSize\r
)\r
{\r
return VFR_RETURN_SUCCESS;\r
}\r
\r
-EFI_VFR_RETURN_CODE \r
+EFI_VFR_RETURN_CODE\r
CVfrDataStorage::DeclareEfiVarStore (\r
- IN INT8 *StoreName, \r
- IN EFI_GUID *Guid, \r
+ IN INT8 *StoreName,\r
+ IN EFI_GUID *Guid,\r
IN EFI_STRING_ID NameStrId,\r
IN UINT32 VarSize\r
)\r
return VFR_RETURN_SUCCESS;\r
}\r
\r
-EFI_VFR_RETURN_CODE \r
+EFI_VFR_RETURN_CODE\r
CVfrDataStorage::DeclareBufferVarStore (\r
- IN INT8 *StoreName, \r
- IN EFI_GUID *Guid, \r
+ IN INT8 *StoreName,\r
+ IN EFI_GUID *Guid,\r
IN CVfrVarDataTypeDB *DataTypeDB,\r
IN INT8 *TypeName,\r
IN EFI_VARSTORE_ID VarStoreId\r
return VFR_RETURN_SUCCESS;\r
}\r
\r
-EFI_VFR_RETURN_CODE \r
+EFI_VFR_RETURN_CODE\r
CVfrDataStorage::GetVarStoreId (\r
IN INT8 *StoreName,\r
OUT EFI_VARSTORE_ID *VarStoreId\r
return VFR_RETURN_UNDEFINED;\r
}\r
\r
+EFI_VFR_VARSTORE_TYPE\r
+CVfrDataStorage::GetVarStoreType (\r
+ IN EFI_VARSTORE_ID VarStoreId\r
+ )\r
+{\r
+ SVfrVarStorageNode *pNode;\r
+ EFI_VFR_VARSTORE_TYPE VarStoreType;\r
+\r
+ VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
+\r
+ if (VarStoreId == EFI_VARSTORE_ID_INVALID) {\r
+ return VarStoreType;\r
+ }\r
+\r
+ for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
+ if (pNode->mVarStoreId == VarStoreId) {\r
+ VarStoreType = pNode->mVarStoreType;\r
+ return VarStoreType;\r
+ }\r
+ }\r
+\r
+ for (pNode = mEfiVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
+ if (pNode->mVarStoreId == VarStoreId) {\r
+ VarStoreType = pNode->mVarStoreType;\r
+ return VarStoreType;\r
+ }\r
+ }\r
+\r
+ for (pNode = mNameVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
+ if (pNode->mVarStoreId == VarStoreId) {\r
+ VarStoreType = pNode->mVarStoreType;\r
+ return VarStoreType;\r
+ }\r
+ }\r
+\r
+ return VarStoreType;\r
+}\r
+\r
EFI_VFR_RETURN_CODE\r
CVfrDataStorage::GetVarStoreName (\r
- IN EFI_VARSTORE_ID VarStoreId, \r
+ IN EFI_VARSTORE_ID VarStoreId,\r
OUT INT8 **VarStoreName\r
)\r
{\r
INT8 NewReqElt[128] = {'\0',};\r
INT8 *OldReqElt = NULL;\r
SVfrVarStorageNode *pNode = NULL;\r
- EFI_IFR_TYPE_VALUE Value;\r
+ EFI_IFR_TYPE_VALUE Value = {0};\r
\r
for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
if (strcmp (pNode->mVarStoreName, StoreName) == NULL) {\r
\r
SVfrDefaultStoreNode::SVfrDefaultStoreNode (\r
IN EFI_IFR_DEFAULTSTORE *ObjBinAddr,\r
- IN INT8 *RefName, \r
- IN EFI_STRING_ID DefaultStoreNameId, \r
+ IN INT8 *RefName,\r
+ IN EFI_STRING_ID DefaultStoreNameId,\r
IN UINT16 DefaultId\r
)\r
{\r
}\r
\r
/*\r
- * assign new reference name or new default store name id only if \r
+ * assign new reference name or new default store name id only if\r
* the original is invalid\r
*/\r
EFI_VFR_RETURN_CODE\r
STATIC\r
EFI_VFR_RETURN_CODE\r
AltCfgItemPrintToBuffer (\r
- IN INT8 *NewAltCfg, \r
- IN EFI_VARSTORE_INFO Info, \r
+ IN INT8 *NewAltCfg,\r
+ IN EFI_VARSTORE_INFO Info,\r
IN UINT8 Type,\r
IN EFI_IFR_TYPE_VALUE Value\r
)\r
\r
if (NewAltCfg != NULL) {\r
Count = sprintf (\r
- NewAltCfg, \r
- "&OFFSET=%x&WIDTH=%x&VALUE=", \r
- Info.mInfo.mVarOffset, \r
+ NewAltCfg,\r
+ "&OFFSET=%x&WIDTH=%x&VALUE=",\r
+ Info.mInfo.mVarOffset,\r
Info.mVarTotalSize\r
);\r
NewAltCfg += Count;\r
}\r
}\r
\r
- return VFR_RETURN_FATAL_ERROR; \r
+ return VFR_RETURN_FATAL_ERROR;\r
}\r
\r
EFI_VFR_RETURN_CODE\r
{\r
SVfrDefaultStoreNode *pNode = NULL;\r
INT8 NewAltCfg[2 * 2 * sizeof (UINT16) + 1] = {0,};\r
+ INTN Returnvalue = 0;\r
\r
if (VarStoreName == NULL) {\r
return VFR_RETURN_FATAL_ERROR;\r
gCVfrBufferConfig.Open ();\r
\r
sprintf (NewAltCfg, "%04x", pNode->mDefaultId);\r
- if ((gCVfrBufferConfig.Select(VarStoreName) == 0) && \r
- (gCVfrBufferConfig.Select(VarStoreName, NewAltCfg) != 0)) {\r
- if (gCVfrBufferConfig.Write ('i', VarStoreName, NewAltCfg, Type, Info.mInfo.mVarOffset, Info.mVarTotalSize, Value) != 0) {\r
+ if ((Returnvalue = gCVfrBufferConfig.Select(VarStoreName)) == 0) {\r
+ if ((Returnvalue = gCVfrBufferConfig.Write ('a', VarStoreName, NewAltCfg, Type, Info.mInfo.mVarOffset, Info.mVarTotalSize, Value)) != 0) {\r
goto WriteError;\r
}\r
}\r
\r
- if (gCVfrBufferConfig.Write ('a', VarStoreName, NULL, Type, Info.mInfo.mVarOffset, Info.mVarTotalSize, Value) != 0) {\r
- goto WriteError;\r
- }\r
-\r
gCVfrBufferConfig.Close ();\r
\r
return VFR_RETURN_SUCCESS;\r
\r
WriteError:\r
gCVfrBufferConfig.Close ();\r
- return VFR_RETURN_FATAL_ERROR;\r
+ return (EFI_VFR_RETURN_CODE)Returnvalue;\r
}\r
\r
SVfrRuleNode::SVfrRuleNode (\r
- IN INT8 *RuleName, \r
+ IN INT8 *RuleName,\r
IN UINT8 RuleId\r
)\r
{\r
mVarTotalSize = Info.mVarTotalSize;\r
}\r
\r
-BOOLEAN \r
+BOOLEAN\r
EFI_VARSTORE_INFO::operator == (\r
IN EFI_VARSTORE_INFO *Info\r
)\r
return (mFreeQIdBitMap[Index] & (0x80000000 >> Offset)) == 0;\r
}\r
\r
-VOID \r
+VOID\r
CVfrQuestionDB::MarkQuestionIdUsed (\r
IN EFI_QUESTION_ID QId\r
)\r
mFreeQIdBitMap[Index] |= (0x80000000 >> Offset);\r
}\r
\r
-VOID \r
+VOID\r
CVfrQuestionDB::MarkQuestionIdUnused (\r
IN EFI_QUESTION_ID QId\r
)\r
\r
VOID\r
CVfrQuestionDB::RegisterOldDateQuestion (\r
- IN INT8 *YearVarId, \r
- IN INT8 *MonthVarId, \r
- IN INT8 *DayVarId, \r
+ IN INT8 *YearVarId,\r
+ IN INT8 *MonthVarId,\r
+ IN INT8 *DayVarId,\r
IN OUT EFI_QUESTION_ID &QuestionId\r
)\r
{\r
VOID\r
CVfrQuestionDB::RegisterNewDateQuestion (\r
IN INT8 *Name,\r
- IN INT8 *BaseVarId, \r
+ IN INT8 *BaseVarId,\r
IN OUT EFI_QUESTION_ID &QuestionId\r
)\r
{\r
\r
VOID\r
CVfrQuestionDB::RegisterOldTimeQuestion (\r
- IN INT8 *HourVarId, \r
- IN INT8 *MinuteVarId, \r
- IN INT8 *SecondVarId, \r
+ IN INT8 *HourVarId,\r
+ IN INT8 *MinuteVarId,\r
+ IN INT8 *SecondVarId,\r
IN OUT EFI_QUESTION_ID &QuestionId\r
)\r
{\r
return VFR_RETURN_SUCCESS;\r
}\r
\r
-VOID \r
+VOID\r
CVfrQuestionDB::GetQuestionId (\r
IN INT8 *Name,\r
IN INT8 *VarIdStr,\r
return ;\r
}\r
\r
-EFI_VFR_RETURN_CODE \r
+EFI_VFR_RETURN_CODE\r
CVfrQuestionDB::FindQuestion (\r
IN EFI_QUESTION_ID QuestionId\r
)\r
return VFR_RETURN_UNDEFINED;\r
}\r
\r
-EFI_VFR_RETURN_CODE \r
+EFI_VFR_RETURN_CODE\r
CVfrQuestionDB::FindQuestion (\r
IN INT8 *Name\r
)\r