]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.cpp
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrUtilityLib.cpp
diff --git a/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.cpp b/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.cpp
deleted file mode 100644 (file)
index d6f5f43..0000000
+++ /dev/null
@@ -1,2844 +0,0 @@
-/*++\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
-#include "VfrFormPkg.h"\r
-\r
-VOID\r
-CVfrBinaryOutput::WriteLine (\r
-  IN FILE   *pFile,\r
-  IN UINT32 LineBytes,\r
-  IN INT8   *LineHeader,\r
-  IN INT8   *BlkBuf,\r
-  IN UINT32 BlkSize\r
-  )\r
-{\r
-  UINT32    Index;\r
-\r
-  if ((pFile == NULL) || (LineHeader == NULL) || (BlkBuf == NULL)) {\r
-    return;\r
-  }\r
-\r
-  for (Index = 0; Index < BlkSize; Index++) {\r
-    if ((Index % LineBytes) == 0) {\r
-      fprintf (pFile, "\n%s", LineHeader);\r
-    }\r
-    fprintf (pFile, "0x%02X,  ", (UINT8)BlkBuf[Index]);\r
-  }\r
-}\r
-\r
-VOID\r
-CVfrBinaryOutput::WriteEnd (\r
-  IN FILE   *pFile,\r
-  IN UINT32 LineBytes,\r
-  IN INT8   *LineHeader,\r
-  IN INT8   *BlkBuf,\r
-  IN UINT32 BlkSize\r
-  )\r
-{\r
-  UINT32    Index;\r
-\r
-  if ((BlkSize == 0) || (pFile == NULL) || (LineHeader == NULL) || (BlkBuf == NULL)) {\r
-    return;\r
-  }\r
-\r
-  for (Index = 0; Index < BlkSize - 1; Index++) {\r
-    if ((Index % LineBytes) == 0) {\r
-      fprintf (pFile, "\n%s", LineHeader);\r
-    }\r
-    fprintf (pFile, "0x%02X,  ", (UINT8)BlkBuf[Index]);\r
-  }\r
-\r
-  if ((Index % LineBytes) == 0) {\r
-    fprintf (pFile, "\n%s", LineHeader);\r
-  }\r
-  fprintf (pFile, "0x%02X\n", (UINT8)BlkBuf[Index]);\r
-}\r
-\r
-SConfigInfo::SConfigInfo (\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
-  if (mValue == NULL) {\r
-    return;\r
-  }\r
-\r
-  switch (Type) {\r
-  case EFI_IFR_TYPE_NUM_SIZE_8 :\r
-    memcpy (mValue, &Value.u8, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_NUM_SIZE_16 :\r
-    memcpy (mValue, &Value.u16, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_NUM_SIZE_32 :\r
-    memcpy (mValue, &Value.u32, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_NUM_SIZE_64 :\r
-    memcpy (mValue, &Value.u64, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_BOOLEAN :\r
-    memcpy (mValue, &Value.b, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_TIME :\r
-    memcpy (mValue, &Value.time, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_DATE :\r
-    memcpy (mValue, &Value.date, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_STRING :\r
-    memcpy (mValue, &Value.string, mWidth);\r
-    break;\r
-  case EFI_IFR_TYPE_OTHER :\r
-    return;\r
-  }\r
-}\r
-\r
-SConfigInfo::~SConfigInfo (\r
-  VOID\r
-  )\r
-{\r
-  BUFFER_SAFE_FREE (mValue);\r
-}\r
-\r
-SConfigItem::SConfigItem (\r
-  IN INT8                *Name,\r
-  IN INT8                *Id\r
-  )\r
-{\r
-  mName          = NULL;\r
-  mId            = NULL;\r
-  mInfoStrList = NULL;\r
-  mNext        = NULL;\r
-\r
-  if (Name != NULL) {\r
-    if ((mName = new INT8[strlen (Name) + 1]) != NULL) {\r
-      strcpy (mName, Name);\r
-    }\r
-  }\r
-\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                *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
-  mInfoStrList = NULL;\r
-  mNext        = NULL;\r
-\r
-  if (Name != NULL) {\r
-    if ((mName = new INT8[strlen (Name) + 1]) != NULL) {\r
-      strcpy (mName, Name);\r
-    }\r
-  }\r
-\r
-  if (Id != NULL) {\r
-    if ((mId = new INT8[strlen (Id) + 1]) != NULL) {\r
-      strcpy (mId, Id);\r
-    }\r
-  }\r
-\r
-  mInfoStrList = new SConfigInfo(Type, Offset, Width, Value);\r
-}\r
-\r
-SConfigItem::~SConfigItem (\r
-  VOID\r
-  )\r
-{\r
-  SConfigInfo  *Info;\r
-\r
-  BUFFER_SAFE_FREE (mName);\r
-  BUFFER_SAFE_FREE (mId);\r
-  while (mInfoStrList != NULL) {\r
-    Info = mInfoStrList;\r
-    mInfoStrList = mInfoStrList->mNext;\r
-\r
-    BUFFER_SAFE_FREE (Info);\r
-  }\r
-}\r
-\r
-UINT8\r
-CVfrBufferConfig::Register (\r
-  IN INT8                *Name,\r
-  IN INT8                *Id\r
-  )\r
-{\r
-  SConfigItem *pNew;\r
-\r
-  if (Select (Name) == 0) {\r
-    return 1;\r
-  }\r
-\r
-  if ((pNew = new SConfigItem (Name, Id)) == NULL) {\r
-    return 2;\r
-  }\r
-  if (mItemListHead == NULL) {\r
-    mItemListHead = pNew;\r
-    mItemListTail = pNew;\r
-  } else {\r
-    mItemListTail->mNext = pNew;\r
-    mItemListTail = pNew;\r
-  }\r
-  mItemListPos    = pNew;\r
-\r
-  return 0;\r
-}\r
-\r
-VOID\r
-CVfrBufferConfig::Open (\r
-  VOID\r
-  )\r
-{\r
-  mItemListPos = mItemListHead;\r
-}\r
-\r
-BOOLEAN\r
-CVfrBufferConfig::Eof(\r
-  VOID\r
-  )\r
-{\r
-  return (mItemListPos == NULL) ? TRUE : FALSE;\r
-}\r
-\r
-UINT8\r
-CVfrBufferConfig::Select (\r
-  IN INT8  *Name,\r
-  IN INT8  *Id\r
-  )\r
-{\r
-  SConfigItem *p;\r
-\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->mName, Name) != 0) {\r
-        continue;\r
-      }\r
-\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
-      return 0;\r
-    }\r
-  }\r
-\r
-  return 1;\r
-}\r
-\r
-UINT8\r
-CVfrBufferConfig::Write (\r
-  IN CONST CHAR8         Mode,\r
-  IN INT8                *Name,\r
-  IN INT8                *Id,\r
-  IN UINT8               Type,\r
-  IN UINT16              Offset,\r
-  IN UINT32              Width,\r
-  IN EFI_IFR_TYPE_VALUE  Value\r
-  )\r
-{\r
-  UINT8         Ret;\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 (Name, Id) != 0) {\r
-      if ((pItem = new SConfigItem (Name, Id, Type, Offset, Width, Value)) == NULL) {\r
-        return 2;\r
-      }\r
-      if (mItemListHead == NULL) {\r
-        mItemListHead = pItem;\r
-        mItemListTail = pItem;\r
-      } else {\r
-        mItemListTail->mNext = pItem;\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 (mItemListHead == mItemListPos) {\r
-      mItemListHead = mItemListPos->mNext;\r
-      delete mItemListPos;\r
-      break;\r
-    }\r
-\r
-    for (pItem = mItemListHead; pItem->mNext != mItemListPos; pItem = pItem->mNext)\r
-      ;\r
-\r
-    pItem->mNext = mItemListPos->mNext;\r
-    if (mItemListTail == mItemListPos) {\r
-      mItemListTail = pItem;\r
-    }\r
-    delete mItemListPos;\r
-    mItemListPos = pItem->mNext;\r
-    break;\r
-\r
-  case 'i' : // set info\r
-    if (mItemListPos->mId != NULL) {\r
-      delete mItemListPos->mId;\r
-    }\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->mId, Id);\r
-    }\r
-    break;\r
-\r
-  default :\r
-    return 1;\r
-  }\r
-\r
-  return 0;\r
-}\r
-\r
-#if 0\r
-UINT8\r
-CVfrBufferConfig::ReadId (\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
-\r
-  return 0;\r
-}\r
-\r
-UINT8\r
-CVfrBufferConfig::ReadInfo (\r
-  IN  INT8      *Name,\r
-  IN  UINT32    Index,\r
-  IN OUT UINT32 &Number,\r
-  OUT INT8      *Offset,\r
-  OUT INT8      *Width,\r
-  OUT INT8      *Value\r
-  )\r
-{\r
-  UINT8         ret;\r
-  SConfigInfo   *p;\r
-  UINT32        idx;\r
-  UINT32        num;\r
-\r
-  if (Name != NULL) {\r
-    if ((ret = Select (Name)) != 0) {\r
-      return ret;\r
-    }\r
-  }\r
-\r
-  if (mInfoStrItemListPos == NULL) {\r
-    return 1; // end read or some error occur\r
-  }\r
-\r
-  p = mInfoStrItemListPos->mInfoStrList;\r
-  for (idx = 0; (idx < Index) && (p != NULL); idx++) {\r
-    p = p->mNext;\r
-  }\r
-  if (p == NULL) {\r
-    return 1;\r
-  }\r
-\r
-  if (Offset != NULL) {\r
-    Offset[0] = '\0';\r
-  }\r
-  if (Width != NULL) {\r
-    Width[0] = '\0';\r
-  }\r
-  if (Value != NULL) {\r
-    Value[0] = '\0';\r
-  }\r
-\r
-  while (num < Number) {\r
-    if (Offset != NULL) {\r
-      strcat (Offset, p->mOffset);\r
-    }\r
-    if (Width != NULL) {\r
-      strcat (Width, p->mWidth);\r
-    }\r
-    if (Value != NULL) {\r
-      strcat (Value, p->mValue);\r
-    }\r
-\r
-    num++;\r
-    if ((p = p->mNext) == NULL) {\r
-      break;\r
-    }\r
-  }\r
-  Number = num;\r
-\r
-  return 0;\r
-}\r
-\r
-VOID\r
-CVfrBufferConfig::ReadNext (\r
-  VOID\r
-  )\r
-{\r
-  if (mItemListPos != NULL) {\r
-    mItemListPos = mItemListPos->mNext;\r
-  }\r
-}\r
-#endif\r
-\r
-VOID\r
-CVfrBufferConfig::Close (\r
-  VOID\r
-  )\r
-{\r
-  mItemListPos = NULL;\r
-}\r
-\r
-#define BYTES_PRE_LINE 0x10\r
-\r
-VOID\r
-CVfrBufferConfig::OutputCFile (\r
-  IN FILE  *pFile,\r
-  IN INT8  *BaseName\r
-  )\r
-{\r
-  CVfrBinaryOutput Output;\r
-  SConfigItem      *Item;\r
-  SConfigInfo      *Info;\r
-  UINT32           TotalLen;\r
-\r
-  if (pFile == NULL) {\r
-    return;\r
-  }\r
-\r
-  for (Item = mItemListHead; Item != NULL; Item = Item->mNext) {\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
-        TotalLen += Info->mWidth + 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
-        if (Info->mNext == NULL) {\r
-          Output.WriteEnd (pFile, BYTES_PRE_LINE, "  ", (INT8 *)Info->mValue, Info->mWidth);\r
-        } else {\r
-          Output.WriteLine (pFile, BYTES_PRE_LINE, "  ", (INT8 *)Info->mValue, Info->mWidth);\r
-        }\r
-      }\r
-      fprintf (pFile, "\n};\n");\r
-    }\r
-  }\r
-}\r
-\r
-CVfrBufferConfig::CVfrBufferConfig (\r
-  VOID\r
-  )\r
-{\r
-  mItemListHead = NULL;\r
-  mItemListTail = NULL;\r
-  mItemListPos  = NULL;\r
-}\r
-\r
-CVfrBufferConfig::~CVfrBufferConfig (\r
-  VOID\r
-  )\r
-{\r
-  SConfigItem *p;\r
-\r
-  while (mItemListHead != NULL) {\r
-    p = mItemListHead;\r
-    mItemListHead = mItemListHead->mNext;\r
-    delete p;\r
-  }\r
-\r
-  mItemListHead = NULL;\r
-  mItemListTail = NULL;\r
-  mItemListPos  = NULL;\r
-}\r
-\r
-CVfrBufferConfig gCVfrBufferConfig;\r
-\r
-static struct {\r
-  INT8   *mTypeName;\r
-  UINT8  mType;\r
-  UINT32 mSize;\r
-  UINT32 mAlign;\r
-} gInternalTypesTable [] = {\r
-  {"UINT64",        EFI_IFR_TYPE_NUM_SIZE_64, sizeof (UINT64),       sizeof (UINT64)},\r
-  {"UINT32",        EFI_IFR_TYPE_NUM_SIZE_32, sizeof (UINT32),       sizeof (UINT32)},\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 (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
-\r
-STATIC\r
-BOOLEAN\r
-_IS_INTERNAL_TYPE (\r
-  IN INT8 *TypeName\r
-  )\r
-{\r
-  UINT32  Index;\r
-\r
-  if (TypeName == NULL) {\r
-    return FALSE;\r
-  }\r
-\r
-  for (Index = 0; gInternalTypesTable[Index].mTypeName != NULL; Index++) {\r
-    if (strcmp (TypeName, gInternalTypesTable[Index].mTypeName) == 0) {\r
-      return TRUE;\r
-    }\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-STATIC\r
-INT8 *\r
-TrimHex (\r
-  IN  INT8    *Str,\r
-  OUT bool    *IsHex\r
-  )\r
-{\r
-  *IsHex = FALSE;\r
-\r
-  while (*Str && *Str == ' ') {\r
-    Str++;\r
-  }\r
-  while (*Str && *Str == '0') {\r
-    Str++;\r
-  }\r
-  if (*Str && (*Str == 'x' || *Str == 'X')) {\r
-    Str++;\r
-    *IsHex = TRUE;\r
-  }\r
-\r
-  return Str;\r
-}\r
-\r
-UINT32\r
-_STR2U32 (\r
-  IN INT8 *Str\r
-  )\r
-{\r
-  bool    IsHex;\r
-  UINT32  Value;\r
-  INT8    c;\r
-\r
-  Str = TrimHex (Str, &IsHex);\r
-  for (Value = 0; (c = *Str) != '\0'; Str++) {\r
-    //\r
-    // BUG: does not handle overflow here\r
-    //\r
-       (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
-    if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
-      Value += (c - 'a' + 10);\r
-    }\r
-    if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
-      Value += (c - 'A' + 10);\r
-    }\r
-    if (c >= '0' && c <= '9') {\r
-      Value += (c - '0');\r
-    }\r
-  }\r
-\r
-  return Value;\r
-}\r
-\r
-VOID\r
-CVfrVarDataTypeDB::RegisterNewType (\r
-  IN SVfrDataType  *New\r
-  )\r
-{\r
-  New->mNext               = mDataTypeList;\r
-  mDataTypeList            = New;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::ExtractStructTypeName (\r
-  IN  INT8 *&VarStr,\r
-  OUT INT8 *TName\r
-  )\r
-{\r
-  if (TName == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  while((*VarStr != '\0') && (*VarStr != '.')) {\r
-    *TName = *VarStr;\r
-    VarStr++;\r
-    TName++;\r
-  }\r
-  *TName = '\0';\r
-  if (*VarStr == '.') {\r
-    VarStr++;\r
-  }\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::ExtractFieldNameAndArrary (\r
-  IN  INT8   *&VarStr,\r
-  IN  INT8   *FName,\r
-  OUT UINT32 &ArrayIdx\r
-  )\r
-{\r
-  UINT32 Idx;\r
-  INT8   ArrayStr[MAX_NAME_LEN + 1];\r
-\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
-    *FName = *VarStr;\r
-    VarStr++;\r
-    FName++;\r
-  }\r
-  *FName = '\0';\r
-\r
-  switch (*VarStr) {\r
-  case '.' :\r
-    VarStr++;\r
-  case '\0':\r
-    return VFR_RETURN_SUCCESS;\r
-  case '[' :\r
-    VarStr++;\r
-    for (Idx = 0; (Idx < MAX_NAME_LEN) && (*VarStr != '\0') && (*VarStr != ']'); VarStr++, Idx++) {\r
-      ArrayStr[Idx] = *VarStr;\r
-    }\r
-    ArrayStr[Idx] = '\0';\r
-\r
-    if ((*VarStr != ']') && (ArrayStr[0] == '\0')) {\r
-      return VFR_RETURN_DATA_STRING_ERROR;\r
-    }\r
-    ArrayIdx = _STR2U32 (ArrayStr);\r
-    if (*VarStr == ']') {\r
-      VarStr++;\r
-    }\r
-    return VFR_RETURN_SUCCESS;\r
-  case ']':\r
-    return VFR_RETURN_DATA_STRING_ERROR;\r
-  }\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::GetTypeField (\r
-  IN  INT8          *FName,\r
-  IN  SVfrDataType  *Type,\r
-  OUT SVfrDataField *&Field\r
-  )\r
-{\r
-  SVfrDataField  *pField = NULL;\r
-\r
-  if ((FName == NULL) && (Type == NULL)) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pField = Type->mMembers; pField != NULL; pField = pField->mNext) {\r
-    if (strcmp (pField->mFieldName, FName) == 0) {\r
-      Field = pField;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return VFR_RETURN_UNDEFINED;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::GetFieldOffset (\r
-  IN  SVfrDataField *Field,\r
-  IN  UINT32        ArrayIdx,\r
-  OUT UINT32        &Offset\r
-  )\r
-{\r
-  if (Field == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  if ((ArrayIdx != INVALID_ARRAY_INDEX) && ((Field->mArrayNum == 0) || (Field->mArrayNum <= ArrayIdx))) {\r
-    return VFR_RETURN_ERROR_ARRARY_NUM;\r
-  }\r
-\r
-  Offset = Field->mOffset + Field->mFieldType->mTotalSize * ((ArrayIdx == INVALID_ARRAY_INDEX) ? 0 : ArrayIdx);\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-UINT8\r
-CVfrVarDataTypeDB::GetFieldWidth (\r
-  IN SVfrDataField *Field\r
-  )\r
-{\r
-  if (Field == NULL) {\r
-    return 0;\r
-  }\r
-\r
-  return Field->mFieldType->mType;\r
-}\r
-\r
-UINT32\r
-CVfrVarDataTypeDB::GetFieldSize (\r
-  IN SVfrDataField *Field,\r
-  IN UINT32       ArrayIdx\r
-  )\r
-{\r
-  if (Field == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  if ((ArrayIdx == INVALID_ARRAY_INDEX) && (Field->mArrayNum != 0)) {\r
-    return Field->mFieldType->mTotalSize * Field->mArrayNum;\r
-  } else {\r
-    return Field->mFieldType->mTotalSize;\r
-  }\r
-}\r
-\r
-VOID\r
-CVfrVarDataTypeDB::InternalTypesListInit (\r
-  VOID\r
-  )\r
-{\r
-  SVfrDataType *New   = NULL;\r
-  UINT32       Index;\r
-\r
-  for (Index = 0; gInternalTypesTable[Index].mTypeName != NULL; Index++) {\r
-    New                 = new SVfrDataType;\r
-    if (New != NULL) {\r
-      strcpy (New->mTypeName, gInternalTypesTable[Index].mTypeName);\r
-      New->mType        = gInternalTypesTable[Index].mType;\r
-      New->mAlign       = gInternalTypesTable[Index].mAlign;\r
-      New->mTotalSize   = gInternalTypesTable[Index].mSize;\r
-      if (strcmp (gInternalTypesTable[Index].mTypeName, "EFI_HII_DATE") == 0) {\r
-        SVfrDataField *pYearField  = new SVfrDataField;\r
-        SVfrDataField *pMonthField = new SVfrDataField;\r
-        SVfrDataField *pDayField   = new SVfrDataField;\r
-\r
-        strcpy (pYearField->mFieldName, "Year");\r
-        GetDataType ("UINT8", &pYearField->mFieldType);\r
-        pYearField->mOffset      = 0;\r
-        pYearField->mNext        = pMonthField;\r
-        pYearField->mArrayNum    = 0;\r
-\r
-        strcpy (pMonthField->mFieldName, "Month");\r
-        GetDataType ("UINT8", &pMonthField->mFieldType);\r
-        pMonthField->mOffset     = 1;\r
-        pMonthField->mNext       = pDayField;\r
-        pMonthField->mArrayNum   = 0;\r
-\r
-        strcpy (pDayField->mFieldName, "Day");\r
-        GetDataType ("UINT8", &pDayField->mFieldType);\r
-        pDayField->mOffset       = 2;\r
-        pDayField->mNext         = NULL;\r
-        pDayField->mArrayNum     = 0;\r
-\r
-        New->mMembers            = pYearField;\r
-      } else if (strcmp (gInternalTypesTable[Index].mTypeName, "EFI_HII_TIME") == 0) {\r
-        SVfrDataField *pHoursField   = new SVfrDataField;\r
-        SVfrDataField *pMinutesField = new SVfrDataField;\r
-        SVfrDataField *pSecondsField = new SVfrDataField;\r
-\r
-        strcpy (pHoursField->mFieldName, "Hours");\r
-        GetDataType ("UINT8", &pHoursField->mFieldType);\r
-        pHoursField->mOffset     = 0;\r
-        pHoursField->mNext       = pMinutesField;\r
-        pHoursField->mArrayNum   = 0;\r
-\r
-        strcpy (pMinutesField->mFieldName, "Minutes");\r
-        GetDataType ("UINT8", &pMinutesField->mFieldType);\r
-        pMinutesField->mOffset   = 1;\r
-        pMinutesField->mNext     = pSecondsField;\r
-        pMinutesField->mArrayNum = 0;\r
-\r
-        strcpy (pSecondsField->mFieldName, "Seconds");\r
-        GetDataType ("UINT8", &pSecondsField->mFieldType);\r
-        pSecondsField->mOffset   = 2;\r
-        pSecondsField->mNext     = NULL;\r
-        pSecondsField->mArrayNum = 0;\r
-\r
-        New->mMembers            = pHoursField;\r
-      } else {\r
-        New->mMembers            = NULL;\r
-      }\r
-      New->mNext                 = NULL;\r
-      RegisterNewType (New);\r
-      New                        = NULL;\r
-    }\r
-  }\r
-}\r
-\r
-CVfrVarDataTypeDB::CVfrVarDataTypeDB (\r
-  VOID\r
-  )\r
-{\r
-  mDataTypeList  = NULL;\r
-  mNewDataType   = NULL;\r
-  mCurrDataField = NULL;\r
-  mPackAlign     = DEFAULT_PACK_ALIGN;\r
-  mPackStack     = NULL;\r
-\r
-  InternalTypesListInit ();\r
-}\r
-\r
-CVfrVarDataTypeDB::~CVfrVarDataTypeDB (\r
-  VOID\r
-  )\r
-{\r
-  SVfrDataType      *pType;\r
-  SVfrDataField     *pField;\r
-  SVfrPackStackNode *pPack;\r
-\r
-  if (mNewDataType != NULL) {\r
-    delete mNewDataType;\r
-  }\r
-\r
-  while (mDataTypeList != NULL) {\r
-    pType = mDataTypeList;\r
-    mDataTypeList = mDataTypeList->mNext;\r
-    while(pType->mMembers != NULL) {\r
-      pField = pType->mMembers;\r
-      pType->mMembers = pType->mMembers->mNext;\r
-      delete pField;\r
-    }\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         LineNum,\r
-  IN UINT8          Action,\r
-  IN INT8           *Identifier,\r
-  IN UINT32         Number\r
-  )\r
-{\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
-  if (Action & VFR_PACK_PUSH) {\r
-    SVfrPackStackNode *pNew = NULL;\r
-\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
-CVfrVarDataTypeDB::DeclareDataTypeBegin (\r
-  VOID\r
-  )\r
-{\r
-  SVfrDataType *pNewType = NULL;\r
-\r
-  pNewType               = new SVfrDataType;\r
-  pNewType->mTypeName[0] = '\0';\r
-  pNewType->mType        = EFI_IFR_TYPE_OTHER;\r
-  pNewType->mAlign       = DEFAULT_ALIGN;\r
-  pNewType->mTotalSize   = 0;\r
-  pNewType->mMembers     = NULL;\r
-  pNewType->mNext        = NULL;\r
-\r
-  mNewDataType           = pNewType;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::SetNewTypeName (\r
-  IN INT8   *TypeName\r
-  )\r
-{\r
-  SVfrDataType *pType;\r
-\r
-  if (mNewDataType == NULL) {\r
-    return VFR_RETURN_ERROR_SKIPED;\r
-  }\r
-  if (TypeName == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-  if (strlen(TypeName) >= MAX_NAME_LEN) {\r
-    return VFR_RETURN_INVALID_PARAMETER;\r
-  }\r
-\r
-  for (pType = mDataTypeList; pType != NULL; pType = pType->mNext) {\r
-    if (strcmp(pType->mTypeName, TypeName) == 0) {\r
-      return VFR_RETURN_REDEFINED;\r
-    }\r
-  }\r
-\r
-  strcpy(mNewDataType->mTypeName, TypeName);\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::DataTypeAddField (\r
-  IN INT8   *FieldName,\r
-  IN INT8   *TypeName,\r
-  IN UINT32 ArrayNum\r
-  )\r
-{\r
-  SVfrDataField       *pNewField  = NULL;\r
-  SVfrDataType        *pFieldType = NULL;\r
-  SVfrDataField       *pTmp;\r
-  UINT32              Align;\r
-\r
-  CHECK_ERROR_RETURN (GetDataType (TypeName, &pFieldType), VFR_RETURN_SUCCESS);\r
-\r
-  if (strlen (FieldName) >= MAX_NAME_LEN) {\r
-   return VFR_RETURN_INVALID_PARAMETER;\r
-  }\r
-\r
-  for (pTmp = mNewDataType->mMembers; pTmp != NULL; pTmp = pTmp->mNext) {\r
-    if (strcmp (pTmp->mFieldName, FieldName) == 0) {\r
-      return VFR_RETURN_REDEFINED;\r
-    }\r
-  }\r
-\r
-  Align = MIN (mPackAlign, pFieldType->mAlign);\r
-\r
-  if ((pNewField = new SVfrDataField) == NULL) {\r
-    return VFR_RETURN_OUT_FOR_RESOURCES;\r
-  }\r
-  strcpy (pNewField->mFieldName, FieldName);\r
-  pNewField->mFieldType    = pFieldType;\r
-  pNewField->mArrayNum     = ArrayNum;\r
-  if ((mNewDataType->mTotalSize % Align) == 0) {\r
-    pNewField->mOffset     = mNewDataType->mTotalSize;\r
-  } else {\r
-    pNewField->mOffset     = mNewDataType->mTotalSize + ALIGN_STUFF(mNewDataType->mTotalSize, Align);\r
-  }\r
-  if (mNewDataType->mMembers == NULL) {\r
-    mNewDataType->mMembers = pNewField;\r
-    pNewField->mNext       = NULL;\r
-  } else {\r
-    for (pTmp = mNewDataType->mMembers; pTmp->mNext != NULL; pTmp = pTmp->mNext)\r
-      ;\r
-    pTmp->mNext            = pNewField;\r
-    pNewField->mNext       = NULL;\r
-  }\r
-\r
-  mNewDataType->mAlign     = MIN (mPackAlign, MAX (pFieldType->mAlign, mNewDataType->mAlign));\r
-  mNewDataType->mTotalSize = pNewField->mOffset + (pNewField->mFieldType->mTotalSize) * ((ArrayNum == 0) ? 1 : ArrayNum);\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-VOID\r
-CVfrVarDataTypeDB::DeclareDataTypeEnd (\r
-  VOID\r
-  )\r
-{\r
-  if (mNewDataType->mTypeName[0] == '\0') {\r
-    return;\r
-  }\r
-\r
-  if ((mNewDataType->mTotalSize % mNewDataType->mAlign) !=0) {\r
-    mNewDataType->mTotalSize += ALIGN_STUFF (mNewDataType->mTotalSize, mNewDataType->mAlign);\r
-  }\r
-\r
-  RegisterNewType (mNewDataType);\r
-  mNewDataType             = NULL;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::GetDataType (\r
-  IN  INT8         *TypeName,\r
-  OUT SVfrDataType **DataType\r
-\r
-  )\r
-{\r
-  SVfrDataType *pDataType = NULL;\r
-\r
-  if (TypeName == NULL) {\r
-    return VFR_RETURN_ERROR_SKIPED;\r
-  }\r
-\r
-  if (DataType == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  *DataType = NULL;\r
-\r
-  for (pDataType = mDataTypeList; pDataType != NULL; pDataType = pDataType->mNext) {\r
-    if (strcmp (TypeName, pDataType->mTypeName) == 0) {\r
-      *DataType = pDataType;\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  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
-  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
-\r
-  for (pDataType = mDataTypeList; pDataType != NULL; pDataType = pDataType->mNext) {\r
-    if (strcmp (TypeName, pDataType->mTypeName) == 0) {\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::GetDataFieldInfo (\r
-  IN  INT8     *VarStr,\r
-  OUT UINT16   &Offset,\r
-  OUT UINT8    &Type,\r
-  OUT UINT32   &Size\r
-  )\r
-{\r
-  INT8                TName[MAX_NAME_LEN], FName[MAX_NAME_LEN];\r
-  UINT32              ArrayIdx, Tmp;\r
-  SVfrDataType        *pType  = NULL;\r
-  SVfrDataField       *pField = NULL;\r
-\r
-  Offset = 0;\r
-  Type   = EFI_IFR_TYPE_OTHER;\r
-  Size   = 0;\r
-\r
-  CHECK_ERROR_RETURN (ExtractStructTypeName (VarStr, TName), VFR_RETURN_SUCCESS);\r
-  CHECK_ERROR_RETURN (GetDataType (TName, &pType), VFR_RETURN_SUCCESS);\r
-\r
-  //\r
-  // if it is not struct data type\r
-  //\r
-  Type  = pType->mType;\r
-  Size  = pType->mTotalSize;\r
-\r
-  while (*VarStr != '\0') {\r
-       CHECK_ERROR_RETURN(ExtractFieldNameAndArrary(VarStr, FName, ArrayIdx), VFR_RETURN_SUCCESS);\r
-    CHECK_ERROR_RETURN(GetTypeField (FName, pType, pField), VFR_RETURN_SUCCESS);\r
-    pType  = pField->mFieldType;\r
-    CHECK_ERROR_RETURN(GetFieldOffset (pField, ArrayIdx, Tmp), VFR_RETURN_SUCCESS);\r
-    Offset += Tmp;\r
-    Type   = GetFieldWidth (pField);\r
-    Size   = GetFieldSize (pField, ArrayIdx);\r
-  }\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrVarDataTypeDB::GetUserDefinedTypeNameList  (\r
-  OUT INT8      ***NameList,\r
-  OUT UINT32    *ListSize\r
-  )\r
-{\r
-  UINT32       Index;\r
-  SVfrDataType *pType;\r
-\r
-  if ((NameList == NULL) || (ListSize == NULL)) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  *NameList = NULL;\r
-  *ListSize = 0;\r
-\r
-  for (pType = mDataTypeList; pType != NULL; pType = pType->mNext) {\r
-    if (_IS_INTERNAL_TYPE(pType->mTypeName) == FALSE) {\r
-      (*ListSize)++;\r
-    }\r
-  }\r
-\r
-  if (*ListSize == 0) {\r
-    return VFR_RETURN_SUCCESS;\r
-  }\r
-\r
-  if ((*NameList = new INT8*[*ListSize]) == NULL) {\r
-    *ListSize = 0;\r
-    return VFR_RETURN_OUT_FOR_RESOURCES;\r
-  }\r
-\r
-  for (Index = 0, pType = mDataTypeList; pType != NULL; pType = pType->mNext, Index++) {\r
-    if (_IS_INTERNAL_TYPE(pType->mTypeName) == FALSE) {\r
-      (*NameList)[Index] = pType->mTypeName;\r
-    }\r
-  }\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-BOOLEAN\r
-CVfrVarDataTypeDB::IsTypeNameDefined (\r
-  IN INT8 *TypeName\r
-  )\r
-{\r
-  SVfrDataType *pType;\r
-\r
-  if (TypeName == NULL) {\r
-    return FALSE;\r
-  }\r
-\r
-  for (pType = mDataTypeList; pType != NULL; pType = pType->mNext) {\r
-    if (strcmp (pType->mTypeName, TypeName) == 0) {\r
-      return TRUE;\r
-    }\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-#ifdef CVFR_VARDATATYPEDB_DEBUG\r
-VOID\r
-CVfrVarDataTypeDB::ParserDB (\r
-  VOID\r
-  )\r
-{\r
-  SVfrDataType  *pTNode;\r
-  SVfrDataField *pFNode;\r
-\r
-  printf ("***************************************************************\n");\r
-  printf ("\t\tmPackAlign = %x\n", mPackAlign);\r
-  for (pTNode = mDataTypeList; pTNode != NULL; pTNode = pTNode->mNext) {\r
-    printf ("\t\tstruct %s : mAlign [%x] mTotalSize [%x]\n\n", pTNode->mTypeName, pTNode->mAlign, pTNode->mTotalSize);\r
-    printf ("\t\tstruct %s {\n", pTNode->mTypeName);\r
-    for (pFNode = pTNode->mMembers; pFNode != NULL; pFNode = pFNode->mNext) {\r
-      printf ("\t\t\t%s\t%s\n", pFNode->mFieldType->mTypeName, pFNode->mFieldName);\r
-    }\r
-    printf ("\t\t};\n");\r
-       printf ("---------------------------------------------------------------\n");\r
-  }\r
-  printf ("***************************************************************\n");\r
-}\r
-#endif\r
-\r
-SVfrVarStorageNode::SVfrVarStorageNode (\r
-  IN EFI_GUID              *Guid,\r
-  IN INT8                  *StoreName,\r
-  IN EFI_VARSTORE_ID       VarStoreId,\r
-  IN EFI_STRING_ID         VarName,\r
-  IN UINT32                VarSize\r
-  )\r
-{\r
-  if (Guid != NULL) {\r
-    mGuid = *Guid;\r
-  } else {\r
-    memset (&Guid, 0, sizeof (EFI_GUID));\r
-  }\r
-  if (StoreName != NULL) {\r
-    mVarStoreName = new INT8[strlen(StoreName) + 1];\r
-    strcpy (mVarStoreName, StoreName);\r
-  } else {\r
-    mVarStoreName = NULL;\r
-  }\r
-  mNext                            = NULL;\r
-  mVarStoreId                      = VarStoreId;\r
-  mVarStoreType                    = EFI_VFR_VARSTORE_EFI;\r
-  mStorageInfo.mEfiVar.mEfiVarName = VarName;\r
-  mStorageInfo.mEfiVar.mEfiVarSize = VarSize;\r
-}\r
-\r
-SVfrVarStorageNode::SVfrVarStorageNode (\r
-  IN EFI_GUID              *Guid,\r
-  IN INT8                  *StoreName,\r
-  IN EFI_VARSTORE_ID       VarStoreId,\r
-  IN SVfrDataType          *DataType\r
-  )\r
-{\r
-  if (Guid != NULL) {\r
-    mGuid = *Guid;\r
-  } else {\r
-    memset (&Guid, 0, sizeof (EFI_GUID));\r
-  }\r
-  if (StoreName != NULL) {\r
-    mVarStoreName = new INT8[strlen(StoreName) + 1];\r
-    strcpy (mVarStoreName, StoreName);\r
-  } else {\r
-    mVarStoreName = NULL;\r
-  }\r
-  mNext                    = NULL;\r
-  mVarStoreId              = VarStoreId;\r
-  mVarStoreType            = EFI_VFR_VARSTORE_BUFFER;\r
-  mStorageInfo.mDataType   = DataType;\r
-}\r
-\r
-SVfrVarStorageNode::SVfrVarStorageNode (\r
-  IN INT8                  *StoreName,\r
-  IN EFI_VARSTORE_ID       VarStoreId\r
-  )\r
-{\r
-  if (StoreName != NULL) {\r
-    mVarStoreName = new INT8[strlen(StoreName) + 1];\r
-    strcpy (mVarStoreName, StoreName);\r
-  } else {\r
-    mVarStoreName = NULL;\r
-  }\r
-  mNext                              = NULL;\r
-  mVarStoreId                        = VarStoreId;\r
-  mVarStoreType                      = EFI_VFR_VARSTORE_NAME;\r
-  mStorageInfo.mNameSpace.mNameTable = new EFI_VARSTORE_ID[DEFAULT_NAME_TABLE_ITEMS];\r
-  mStorageInfo.mNameSpace.mTableSize = 0;\r
-}\r
-\r
-SVfrVarStorageNode::~SVfrVarStorageNode (\r
-  VOID\r
-  )\r
-{\r
-  if (mVarStoreName != NULL) {\r
-    delete mVarStoreName;\r
-  }\r
-\r
-  if (mVarStoreType == EFI_VFR_VARSTORE_NAME) {\r
-    delete mStorageInfo.mNameSpace.mNameTable;\r
-  }\r
-}\r
-\r
-CVfrDataStorage::CVfrDataStorage (\r
-  VOID\r
-  )\r
-{\r
-  UINT32 Index;\r
-\r
-  for (Index = 0; Index < EFI_FREE_VARSTORE_ID_BITMAP_SIZE; Index++) {\r
-    mFreeVarStoreIdBitMap[Index] = 0;\r
-  }\r
-\r
-  // Question ID 0 is reserved.\r
-  mFreeVarStoreIdBitMap[0] = 0x80000000;\r
-\r
-  mBufferVarStoreList      = NULL;\r
-  mEfiVarStoreList         = NULL;\r
-  mNameVarStoreList        = NULL;\r
-  mCurrVarStorageNode      = NULL;\r
-  mNewVarStorageNode       = NULL;\r
-}\r
-\r
-CVfrDataStorage::~CVfrDataStorage (\r
-  VOID\r
-  )\r
-{\r
-  SVfrVarStorageNode *pNode;\r
-\r
-  while (mBufferVarStoreList != NULL) {\r
-    pNode = mBufferVarStoreList;\r
-    mBufferVarStoreList = mBufferVarStoreList->mNext;\r
-    delete pNode;\r
-  }\r
-  while (mEfiVarStoreList != NULL) {\r
-    pNode = mEfiVarStoreList;\r
-    mEfiVarStoreList = mEfiVarStoreList->mNext;\r
-    delete pNode;\r
-  }\r
-  while (mNameVarStoreList != NULL) {\r
-    pNode = mNameVarStoreList;\r
-    mNameVarStoreList = mNameVarStoreList->mNext;\r
-    delete pNode;\r
-  }\r
-  if (mNewVarStorageNode != NULL) {\r
-    delete mNewVarStorageNode;\r
-  }\r
-}\r
-\r
-EFI_VARSTORE_ID\r
-CVfrDataStorage::GetFreeVarStoreId (\r
-  VOID\r
-  )\r
-{\r
-  UINT32  Index, Mask, Offset;\r
-\r
-  for (Index = 0; Index < EFI_FREE_VARSTORE_ID_BITMAP_SIZE; Index++) {\r
-    if (mFreeVarStoreIdBitMap[Index] != 0xFFFFFFFF) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) {\r
-    if ((mFreeVarStoreIdBitMap[Index] & Mask) == 0) {\r
-      mFreeVarStoreIdBitMap[Index] |= Mask;\r
-      return (EFI_VARSTORE_ID)((Index << EFI_BITS_SHIFT_PER_UINT32) + Offset);\r
-    }\r
-  }\r
-\r
-  return EFI_VARSTORE_ID_INVALID;\r
-}\r
-\r
-BOOLEAN\r
-CVfrDataStorage::ChekVarStoreIdFree (\r
-  IN EFI_VARSTORE_ID VarStoreId\r
-  )\r
-{\r
-  UINT32 Index  = (VarStoreId / EFI_BITS_PER_UINT32);\r
-  UINT32 Offset = (VarStoreId % EFI_BITS_PER_UINT32);\r
-\r
-  return (mFreeVarStoreIdBitMap[Index] & (0x80000000 >> Offset)) == 0;\r
-}\r
-\r
-VOID\r
-CVfrDataStorage::MarkVarStoreIdUsed (\r
-  IN EFI_VARSTORE_ID VarStoreId\r
-  )\r
-{\r
-  UINT32 Index  = (VarStoreId / EFI_BITS_PER_UINT32);\r
-  UINT32 Offset = (VarStoreId % EFI_BITS_PER_UINT32);\r
-\r
-  mFreeVarStoreIdBitMap[Index] |= (0x80000000 >> Offset);\r
-}\r
-\r
-VOID\r
-CVfrDataStorage::MarkVarStoreIdUnused (\r
-  IN EFI_VARSTORE_ID VarStoreId\r
-  )\r
-{\r
-  UINT32 Index  = (VarStoreId / EFI_BITS_PER_UINT32);\r
-  UINT32 Offset = (VarStoreId % EFI_BITS_PER_UINT32);\r
-\r
-  mFreeVarStoreIdBitMap[Index] &= ~(0x80000000 >> Offset);\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::DeclareNameVarStoreBegin (\r
-  IN INT8     *StoreName\r
-  )\r
-{\r
-  SVfrVarStorageNode *pNode = NULL;\r
-  EFI_VARSTORE_ID    VarStoreId;\r
-\r
-  if (StoreName == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pNode = mNameVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
-      return VFR_RETURN_REDEFINED;\r
-    }\r
-  }\r
-\r
-  VarStoreId = GetFreeVarStoreId ();\r
-  if ((pNode = new SVfrVarStorageNode (StoreName, VarStoreId)) == NULL) {\r
-    return VFR_RETURN_UNDEFINED;\r
-  }\r
-\r
-  mNewVarStorageNode = pNode;\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::NameTableAddItem (\r
-  IN EFI_STRING_ID  Item\r
-  )\r
-{\r
-  EFI_VARSTORE_ID *NewTable, *OldTable;\r
-  UINT32          TableSize;\r
-\r
-  OldTable  = mNewVarStorageNode->mStorageInfo.mNameSpace.mNameTable;\r
-  TableSize = mNewVarStorageNode->mStorageInfo.mNameSpace.mTableSize;\r
-\r
-  if ((TableSize != 0) && ((TableSize % DEFAULT_NAME_TABLE_ITEMS) == 0)) {\r
-    if ((NewTable = new EFI_VARSTORE_ID[TableSize + DEFAULT_NAME_TABLE_ITEMS]) == NULL) {\r
-      return VFR_RETURN_OUT_FOR_RESOURCES;\r
-    }\r
-    memcpy (NewTable, OldTable, TableSize);\r
-    mNewVarStorageNode->mStorageInfo.mNameSpace.mNameTable = NewTable;\r
-  }\r
-\r
-  mNewVarStorageNode->mStorageInfo.mNameSpace.mNameTable[TableSize++] = Item;\r
-  mNewVarStorageNode->mStorageInfo.mNameSpace.mTableSize = TableSize;\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::DeclareNameVarStoreEnd (\r
-  IN EFI_GUID *Guid\r
-  )\r
-{\r
-  mNewVarStorageNode->mGuid = *Guid;\r
-  mNewVarStorageNode->mNext = mNameVarStoreList;\r
-  mNameVarStoreList         = mNewVarStorageNode;\r
-\r
-  mNewVarStorageNode        = NULL;\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::DeclareEfiVarStore (\r
-  IN INT8           *StoreName,\r
-  IN EFI_GUID       *Guid,\r
-  IN EFI_STRING_ID  NameStrId,\r
-  IN UINT32         VarSize\r
-  )\r
-{\r
-  SVfrVarStorageNode *pNode;\r
-  EFI_VARSTORE_ID    VarStoreId;\r
-\r
-  if ((StoreName == NULL) || (Guid == NULL)) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  if (VarSize > sizeof (UINT64)) {\r
-    return VFR_RETURN_EFIVARSTORE_SIZE_ERROR;\r
-  }\r
-\r
-  for (pNode = mEfiVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
-      return VFR_RETURN_REDEFINED;\r
-    }\r
-  }\r
-\r
-  VarStoreId = GetFreeVarStoreId ();\r
-  if ((pNode = new SVfrVarStorageNode (Guid, StoreName, VarStoreId, NameStrId, VarSize)) == NULL) {\r
-    return VFR_RETURN_OUT_FOR_RESOURCES;\r
-  }\r
-\r
-  pNode->mNext       = mNameVarStoreList;\r
-  mNameVarStoreList  = pNode;\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::DeclareBufferVarStore (\r
-  IN INT8              *StoreName,\r
-  IN EFI_GUID          *Guid,\r
-  IN CVfrVarDataTypeDB *DataTypeDB,\r
-  IN INT8              *TypeName,\r
-  IN EFI_VARSTORE_ID   VarStoreId\r
-  )\r
-{\r
-  SVfrVarStorageNode   *pNew = NULL;\r
-  SVfrDataType         *pDataType = NULL;\r
-\r
-  if ((StoreName == NULL) || (Guid == NULL) || (DataTypeDB == NULL)) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  CHECK_ERROR_RETURN(DataTypeDB->GetDataType (TypeName, &pDataType), VFR_RETURN_SUCCESS);\r
-\r
-  if (VarStoreId == EFI_VARSTORE_ID_INVALID) {\r
-    VarStoreId = GetFreeVarStoreId ();\r
-  } else {\r
-    if (ChekVarStoreIdFree (VarStoreId) == FALSE) {\r
-      return VFR_RETURN_VARSTOREID_REDEFINED;\r
-    }\r
-    MarkVarStoreIdUsed (VarStoreId);\r
-  }\r
-\r
-  if ((pNew = new SVfrVarStorageNode (Guid, StoreName, VarStoreId, pDataType)) == NULL) {\r
-    return VFR_RETURN_OUT_FOR_RESOURCES;\r
-  }\r
-\r
-  pNew->mNext         = mBufferVarStoreList;\r
-  mBufferVarStoreList = pNew;\r
-\r
-  if (gCVfrBufferConfig.Register(StoreName) != 0) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::GetVarStoreId (\r
-  IN  INT8            *StoreName,\r
-  OUT EFI_VARSTORE_ID *VarStoreId\r
-  )\r
-{\r
-  SVfrVarStorageNode    *pNode;\r
-\r
-  for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
-      mCurrVarStorageNode = pNode;\r
-      *VarStoreId = pNode->mVarStoreId;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  for (pNode = mEfiVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
-      mCurrVarStorageNode = pNode;\r
-      *VarStoreId = pNode->mVarStoreId;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  for (pNode = mNameVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
-      mCurrVarStorageNode = pNode;\r
-      *VarStoreId = pNode->mVarStoreId;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  mCurrVarStorageNode = NULL;\r
-  *VarStoreId        = EFI_VARSTORE_ID_INVALID;\r
-  return VFR_RETURN_UNDEFINED;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::GetBufferVarStoreDataTypeName (\r
-  IN  INT8                   *StoreName,\r
-  OUT INT8                   **DataTypeName\r
-  )\r
-{\r
-  SVfrVarStorageNode    *pNode;\r
-\r
-  if ((StoreName == NULL) || (DataTypeName == NULL)) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == 0) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (pNode == NULL) {\r
-    return VFR_RETURN_UNDEFINED;\r
-  }\r
-\r
-  if (pNode->mStorageInfo.mDataType == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  *DataTypeName = pNode->mStorageInfo.mDataType->mTypeName;\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::GetVarStoreType (\r
-  IN  INT8                   *StoreName,\r
-  OUT EFI_VFR_VARSTORE_TYPE  &VarStoreType\r
-  )\r
-{\r
-  SVfrVarStorageNode    *pNode;\r
-\r
-  if (StoreName == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == NULL) {\r
-      VarStoreType = pNode->mVarStoreType;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  for (pNode = mEfiVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == NULL) {\r
-      VarStoreType = pNode->mVarStoreType;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  for (pNode = mNameVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mVarStoreName, StoreName) == NULL) {\r
-      VarStoreType = pNode->mVarStoreType;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  VarStoreType = EFI_VFR_VARSTORE_INVALID;\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
-  OUT INT8            **VarStoreName\r
-  )\r
-{\r
-  SVfrVarStorageNode    *pNode;\r
-\r
-  if (VarStoreName == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mVarStoreId == VarStoreId) {\r
-      *VarStoreName = pNode->mVarStoreName;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  for (pNode = mEfiVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mVarStoreId == VarStoreId) {\r
-      *VarStoreName = pNode->mVarStoreName;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  for (pNode = mNameVarStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mVarStoreId == VarStoreId) {\r
-      *VarStoreName = pNode->mVarStoreName;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  *VarStoreName = NULL;\r
-  return VFR_RETURN_UNDEFINED;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::GetEfiVarStoreInfo (\r
-  IN OUT EFI_VARSTORE_INFO  *Info\r
-  )\r
-{\r
-  if (Info == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  if (mCurrVarStorageNode == NULL) {\r
-    return VFR_RETURN_GET_EFIVARSTORE_ERROR;\r
-  }\r
-\r
-  Info->mInfo.mVarName = mCurrVarStorageNode->mStorageInfo.mEfiVar.mEfiVarName;\r
-  Info->mVarTotalSize  = mCurrVarStorageNode->mStorageInfo.mEfiVar.mEfiVarSize;\r
-  switch (Info->mVarTotalSize) {\r
-  case 1:\r
-    Info->mVarType = EFI_IFR_TYPE_NUM_SIZE_8;\r
-    break;\r
-  case 2:\r
-    Info->mVarType = EFI_IFR_TYPE_NUM_SIZE_16;\r
-    break;\r
-  case 4:\r
-    Info->mVarType = EFI_IFR_TYPE_NUM_SIZE_32;\r
-    break;\r
-  case 8:\r
-    Info->mVarType = EFI_IFR_TYPE_NUM_SIZE_64;\r
-    break;\r
-  default :\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::GetNameVarStoreInfo (\r
-  OUT EFI_VARSTORE_INFO  *Info,\r
-  IN  UINT32             Index\r
-  )\r
-{\r
-  if (Info == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  if (mCurrVarStorageNode == NULL) {\r
-    return VFR_RETURN_GET_NVVARSTORE_ERROR;\r
-  }\r
-\r
-  Info->mInfo.mVarName = mCurrVarStorageNode->mStorageInfo.mNameSpace.mNameTable[Index];\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDataStorage::BufferVarStoreRequestElementAdd (\r
-  IN INT8              *StoreName,\r
-  IN EFI_VARSTORE_INFO &Info\r
-  )\r
-{\r
-  INT8                  NewReqElt[128] = {'\0',};\r
-  INT8                  *OldReqElt = NULL;\r
-  SVfrVarStorageNode    *pNode = NULL;\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
-      break;\r
-    }\r
-  }\r
-\r
-  if (pNode == NULL) {\r
-    return VFR_RETURN_UNDEFINED;\r
-  }\r
-\r
-  gCVfrBufferConfig.Open ();\r
-  Value.u8 = 0;\r
-  if (gCVfrBufferConfig.Write ('a', StoreName, NULL, EFI_IFR_TYPE_NUM_SIZE_8, Info.mInfo.mVarOffset, Info.mVarTotalSize, Value) != 0) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-  gCVfrBufferConfig.Close ();\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-SVfrDefaultStoreNode::SVfrDefaultStoreNode (\r
-  IN EFI_IFR_DEFAULTSTORE *ObjBinAddr,\r
-  IN INT8                 *RefName,\r
-  IN EFI_STRING_ID        DefaultStoreNameId,\r
-  IN UINT16               DefaultId\r
-  )\r
-{\r
-  mObjBinAddr = ObjBinAddr;\r
-\r
-  if (RefName != NULL) {\r
-    mRefName          = new INT8[strlen (RefName) + 1];\r
-    strcpy (mRefName, RefName);\r
-  } else {\r
-    mRefName          = NULL;\r
-  }\r
-\r
-  mNext               = NULL;\r
-  mDefaultId          = DefaultId;\r
-  mDefaultStoreNameId = DefaultStoreNameId;\r
-}\r
-\r
-SVfrDefaultStoreNode::~SVfrDefaultStoreNode (\r
-  VOID\r
-  )\r
-{\r
-  if (mRefName != NULL) {\r
-    delete mRefName;\r
-  }\r
-}\r
-\r
-CVfrDefaultStore::CVfrDefaultStore (\r
-  VOID\r
-  )\r
-{\r
-  mDefaultStoreList = NULL;\r
-}\r
-\r
-CVfrDefaultStore::~CVfrDefaultStore (\r
-  VOID\r
-  )\r
-{\r
-  SVfrDefaultStoreNode *pTmp = NULL;\r
-\r
-  while (mDefaultStoreList != NULL) {\r
-    pTmp = mDefaultStoreList;\r
-    mDefaultStoreList = mDefaultStoreList->mNext;\r
-    delete pTmp;\r
-  }\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDefaultStore::RegisterDefaultStore (\r
-  IN CHAR8                *ObjBinAddr,\r
-  IN INT8                 *RefName,\r
-  IN EFI_STRING_ID        DefaultStoreNameId,\r
-  IN UINT16               DefaultId\r
-  )\r
-{\r
-  SVfrDefaultStoreNode *pNode = NULL;\r
-\r
-  if (RefName == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pNode = mDefaultStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mRefName, RefName) == 0) {\r
-      return VFR_RETURN_REDEFINED;\r
-    }\r
-  }\r
-\r
-  if ((pNode = new SVfrDefaultStoreNode ((EFI_IFR_DEFAULTSTORE *)ObjBinAddr, RefName, DefaultStoreNameId, DefaultId)) == NULL) {\r
-    return VFR_RETURN_OUT_FOR_RESOURCES;\r
-  }\r
-\r
-  pNode->mNext               = mDefaultStoreList;\r
-  mDefaultStoreList          = pNode;\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-/*\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
-CVfrDefaultStore::ReRegisterDefaultStoreById (\r
-  IN UINT16          DefaultId,\r
-  IN INT8            *RefName,\r
-  IN EFI_STRING_ID   DefaultStoreNameId\r
-  )\r
-{\r
-  SVfrDefaultStoreNode *pNode = NULL;\r
-\r
-  for (pNode = mDefaultStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mDefaultId == DefaultId) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (pNode == NULL) {\r
-    return VFR_RETURN_UNDEFINED;\r
-  } else {\r
-    if (pNode->mDefaultStoreNameId == EFI_STRING_ID_INVALID) {\r
-      pNode->mDefaultStoreNameId  = DefaultStoreNameId;\r
-      if (pNode->mObjBinAddr != NULL) {\r
-        pNode->mObjBinAddr->DefaultName = DefaultStoreNameId;\r
-      }\r
-    } else {\r
-      return VFR_RETURN_REDEFINED;\r
-    }\r
-\r
-    if (RefName != NULL) {\r
-      delete pNode->mRefName;\r
-      pNode->mRefName = new INT8[strlen (RefName) + 1];\r
-      if (pNode->mRefName != NULL) {\r
-        strcpy (pNode->mRefName, RefName);\r
-      }\r
-    }\r
-  }\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-BOOLEAN\r
-CVfrDefaultStore::DefaultIdRegistered (\r
-  IN UINT16          DefaultId\r
-  )\r
-{\r
-  SVfrDefaultStoreNode *pNode = NULL;\r
-\r
-  for (pNode = mDefaultStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mDefaultId == DefaultId) {\r
-      return TRUE;\r
-    }\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDefaultStore::GetDefaultId (\r
-  IN  INT8            *RefName,\r
-  OUT UINT16          *DefaultId\r
-  )\r
-{\r
-  SVfrDefaultStoreNode *pTmp = NULL;\r
-\r
-  if (DefaultId == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pTmp = mDefaultStoreList; pTmp != NULL; pTmp = pTmp->mNext) {\r
-    if (strcmp (pTmp->mRefName, RefName) == 0) {\r
-      *DefaultId = pTmp->mDefaultId;\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return VFR_RETURN_UNDEFINED;\r
-}\r
-\r
-STATIC\r
-EFI_VFR_RETURN_CODE\r
-AltCfgItemPrintToBuffer (\r
-  IN INT8               *NewAltCfg,\r
-  IN EFI_VARSTORE_INFO  Info,\r
-  IN UINT8              Type,\r
-  IN EFI_IFR_TYPE_VALUE Value\r
-  )\r
-{\r
-  UINT32 Index;\r
-  UINT8  *BufChar = NULL;\r
-  UINT32 Count    = 0;\r
-\r
-  if (NewAltCfg != NULL) {\r
-    Count = sprintf (\r
-              NewAltCfg,\r
-              "&OFFSET=%x&WIDTH=%x&VALUE=",\r
-              Info.mInfo.mVarOffset,\r
-              Info.mVarTotalSize\r
-              );\r
-    NewAltCfg += Count;\r
-\r
-    switch (Type) {\r
-    case EFI_IFR_TYPE_NUM_SIZE_8 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u8);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_NUM_SIZE_16 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u16);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_NUM_SIZE_32 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u32);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_NUM_SIZE_64 :\r
-      Count = sprintf (NewAltCfg, "%x", Value.u64);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_BOOLEAN :\r
-      Count = sprintf (NewAltCfg, "%x", Value.b);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_TIME :\r
-#if 1\r
-      Count = sprintf (NewAltCfg, "%x", *((UINT32 *)(&Value.time)));\r
-      NewAltCfg += Count;\r
-#else\r
-      BufChar = (UINT8 *)&Value.time;\r
-      for (Index = 0; Index < sizeof(EFI_HII_TIME); Index++) {\r
-        Count = sprintf (NewAltCfg, "%02x", (UINT8)BufChar[Index]);\r
-        NewAltCfg += Count;\r
-      }\r
-#endif\r
-      break;\r
-    case EFI_IFR_TYPE_DATE :\r
-#if 1\r
-      Count = sprintf (NewAltCfg, "%x", *((UINT32 *)(&Value.date)));\r
-      NewAltCfg += Count;\r
-#else\r
-      BufChar = (UINT8 *)&Value.date;\r
-      for (Index = 0; Index < sizeof(EFI_HII_DATE); Index++) {\r
-        Count = sprintf (NewAltCfg, "%02x", (UINT8)BufChar[Index]);\r
-        NewAltCfg += Count;\r
-      }\r
-#endif\r
-      break;\r
-    case EFI_IFR_TYPE_STRING :\r
-      Count = sprintf (NewAltCfg, "%x", Value.string);\r
-      NewAltCfg += Count;\r
-      break;\r
-    case EFI_IFR_TYPE_OTHER :\r
-      return VFR_RETURN_UNSUPPORTED;\r
-       }\r
-  }\r
-\r
-  return VFR_RETURN_FATAL_ERROR;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrDefaultStore::BufferVarStoreAltConfigAdd (\r
-  IN EFI_VARSTORE_ID    DefaultId,\r
-  IN EFI_VARSTORE_INFO  &Info,\r
-  IN INT8               *VarStoreName,\r
-  IN UINT8              Type,\r
-  IN EFI_IFR_TYPE_VALUE Value\r
-  )\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
-  }\r
-\r
-  for (pNode = mDefaultStoreList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mDefaultId == DefaultId) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (pNode == NULL) {\r
-    return VFR_RETURN_UNDEFINED;\r
-  }\r
-\r
-  gCVfrBufferConfig.Open ();\r
-\r
-  sprintf (NewAltCfg, "%04x", pNode->mDefaultId);\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
-  gCVfrBufferConfig.Close ();\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-\r
-WriteError:\r
-  gCVfrBufferConfig.Close ();\r
-  return (EFI_VFR_RETURN_CODE)Returnvalue;\r
-}\r
-\r
-SVfrRuleNode::SVfrRuleNode (\r
-  IN INT8        *RuleName,\r
-  IN UINT8       RuleId\r
-  )\r
-{\r
-  if (RuleName != NULL) {\r
-    mRuleName = new INT8[strlen (RuleName) + 1];\r
-    strcpy (mRuleName, RuleName);\r
-  } else {\r
-    mRuleName = NULL;\r
-  }\r
-\r
-  mNext       = NULL;\r
-  mRuleId     = RuleId;\r
-}\r
-\r
-SVfrRuleNode::~SVfrRuleNode (\r
-  VOID\r
-  )\r
-{\r
-  if (mRuleName != NULL) {\r
-    delete mRuleName;\r
-  }\r
-}\r
-\r
-CVfrRulesDB::CVfrRulesDB ()\r
-{\r
-  mRuleList   = NULL;\r
-  mFreeRuleId = EFI_VARSTORE_ID_START;\r
-}\r
-\r
-CVfrRulesDB::~CVfrRulesDB ()\r
-{\r
-  SVfrRuleNode *pNode;\r
-\r
-  while(mRuleList != NULL) {\r
-    pNode = mRuleList;\r
-    mRuleList = mRuleList->mNext;\r
-    delete pNode;\r
-  }\r
-}\r
-\r
-VOID\r
-CVfrRulesDB::RegisterRule (\r
-  IN INT8   *RuleName\r
-  )\r
-{\r
-  SVfrRuleNode *pNew;\r
-\r
-  if (RuleName == NULL) {\r
-    return ;\r
-  }\r
-\r
-  if ((pNew = new SVfrRuleNode (RuleName, mFreeRuleId)) == NULL) {\r
-    return ;\r
-  }\r
-\r
-  mFreeRuleId++;\r
-\r
-  pNew->mNext = mRuleList;\r
-  mRuleList   = pNew;\r
-}\r
-\r
-UINT8\r
-CVfrRulesDB::GetRuleId (\r
-  IN INT8   *RuleName\r
-  )\r
-{\r
-  SVfrRuleNode *pNode;\r
-\r
-  if (RuleName == NULL) {\r
-    return EFI_RULE_ID_INVALID;\r
-  }\r
-\r
-  for (pNode = mRuleList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mRuleName, RuleName) == 0) {\r
-      return pNode->mRuleId;\r
-    }\r
-  }\r
-\r
-  return EFI_RULE_ID_INVALID;\r
-}\r
-\r
-CVfrRulesDB gCVfrRulesDB;\r
-\r
-EFI_VARSTORE_INFO::EFI_VARSTORE_INFO (\r
-  VOID\r
-  )\r
-{\r
-  mVarStoreId      = EFI_VARSTORE_ID_INVALID;\r
-  mInfo.mVarName   = EFI_STRING_ID_INVALID;\r
-  mInfo.mVarOffset = EFI_VAROFFSET_INVALID;\r
-  mVarType         = EFI_IFR_TYPE_OTHER;\r
-  mVarTotalSize    = 0;\r
-}\r
-\r
-EFI_VARSTORE_INFO::EFI_VARSTORE_INFO (\r
-  IN EFI_VARSTORE_INFO &Info\r
-  )\r
-{\r
-  mVarStoreId      = Info.mVarStoreId;\r
-  mInfo.mVarName   = Info.mInfo.mVarName;\r
-  mInfo.mVarOffset = Info.mInfo.mVarOffset;\r
-  mVarType         = Info.mVarType;\r
-  mVarTotalSize    = Info.mVarTotalSize;\r
-}\r
-\r
-BOOLEAN\r
-EFI_VARSTORE_INFO::operator == (\r
-  IN EFI_VARSTORE_INFO  *Info\r
-  )\r
-{\r
-  if ((mVarStoreId == Info->mVarStoreId) &&\r
-         (mInfo.mVarName == Info->mInfo.mVarName) &&\r
-      (mInfo.mVarOffset == Info->mInfo.mVarOffset) &&\r
-      (mVarType == Info->mVarType) &&\r
-      (mVarTotalSize == Info->mVarTotalSize)) {\r
-    return TRUE;\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-static EFI_VARSTORE_INFO gEfiInvalidVarStoreInfo;\r
-\r
-EFI_QUESTION_ID\r
-CVfrQuestionDB::GetFreeQuestionId (\r
-  VOID\r
-  )\r
-{\r
-  UINT32  Index, Mask, Offset;\r
-\r
-  for (Index = 0; Index < EFI_FREE_QUESTION_ID_BITMAP_SIZE; Index++) {\r
-    if (mFreeQIdBitMap[Index] != 0xFFFFFFFF) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) {\r
-    if ((mFreeQIdBitMap[Index] & Mask) == 0) {\r
-      mFreeQIdBitMap[Index] |= Mask;\r
-      return (EFI_QUESTION_ID)((Index << EFI_BITS_SHIFT_PER_UINT32) + Offset);\r
-    }\r
-  }\r
-\r
-  return EFI_QUESTION_ID_INVALID;\r
-}\r
-\r
-BOOLEAN\r
-CVfrQuestionDB::ChekQuestionIdFree (\r
-  IN EFI_QUESTION_ID QId\r
-  )\r
-{\r
-  UINT32 Index  = (QId / EFI_BITS_PER_UINT32);\r
-  UINT32 Offset = (QId % EFI_BITS_PER_UINT32);\r
-\r
-  return (mFreeQIdBitMap[Index] & (0x80000000 >> Offset)) == 0;\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::MarkQuestionIdUsed (\r
-  IN EFI_QUESTION_ID QId\r
-  )\r
-{\r
-  UINT32 Index  = (QId / EFI_BITS_PER_UINT32);\r
-  UINT32 Offset = (QId % EFI_BITS_PER_UINT32);\r
-\r
-  mFreeQIdBitMap[Index] |= (0x80000000 >> Offset);\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::MarkQuestionIdUnused (\r
-  IN EFI_QUESTION_ID QId\r
-  )\r
-{\r
-  UINT32 Index  = (QId / EFI_BITS_PER_UINT32);\r
-  UINT32 Offset = (QId % EFI_BITS_PER_UINT32);\r
-\r
-  mFreeQIdBitMap[Index] &= ~(0x80000000 >> Offset);\r
-}\r
-\r
-SVfrQuestionNode::SVfrQuestionNode (\r
-  IN INT8   *Name,\r
-  IN INT8   *VarIdStr,\r
-  IN UINT32 BitMask\r
-  )\r
-{\r
-  mName       = NULL;\r
-  mVarIdStr   = NULL;\r
-  mQuestionId = EFI_QUESTION_ID_INVALID;\r
-  mBitMask    = BitMask;\r
-  mNext       = NULL;\r
-\r
-  if (Name == NULL) {\r
-    mName = new INT8[strlen ("$DEFAULT") + 1];\r
-    strcpy (mName, "$DEFAULT");\r
-  } else {\r
-    mName = new INT8[strlen (Name) + 1];\r
-    strcpy (mName, Name);\r
-  }\r
-\r
-  if (VarIdStr != NULL) {\r
-    mVarIdStr = new INT8[strlen (VarIdStr) + 1];\r
-    strcpy (mVarIdStr, VarIdStr);\r
-  } else {\r
-    mVarIdStr = new INT8[strlen ("$") + 1];\r
-    strcpy (mVarIdStr, "$");\r
-  }\r
-}\r
-\r
-SVfrQuestionNode::~SVfrQuestionNode (\r
-  VOID\r
-  )\r
-{\r
-  if (mName != NULL) {\r
-    delete mName;\r
-  }\r
-\r
-  if (mVarIdStr != NULL) {\r
-    delete mVarIdStr;\r
-  }\r
-}\r
-\r
-CVfrQuestionDB::CVfrQuestionDB ()\r
-{\r
-  UINT32 Index;\r
-\r
-  for (Index = 0; Index < EFI_FREE_QUESTION_ID_BITMAP_SIZE; Index++) {\r
-    mFreeQIdBitMap[Index] = 0;\r
-  }\r
-\r
-  // Question ID 0 is reserved.\r
-  mFreeQIdBitMap[0] = 0x80000000;\r
-  mQuestionList     = NULL;\r
-}\r
-\r
-CVfrQuestionDB::~CVfrQuestionDB ()\r
-{\r
-  SVfrQuestionNode     *pNode;\r
-\r
-  while (mQuestionList != NULL) {\r
-    pNode = mQuestionList;\r
-    mQuestionList = mQuestionList->mNext;\r
-    delete pNode;\r
-  }\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrQuestionDB::RegisterQuestion (\r
-  IN     INT8              *Name,\r
-  IN     INT8              *VarIdStr,\r
-  IN OUT EFI_QUESTION_ID   &QuestionId\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode = NULL;\r
-\r
-  if ((Name != NULL) && (FindQuestion(Name) == VFR_RETURN_SUCCESS)) {\r
-    return VFR_RETURN_REDEFINED;\r
-  }\r
-\r
-  if ((pNode = new SVfrQuestionNode (Name, VarIdStr)) == NULL) {\r
-    return VFR_RETURN_OUT_FOR_RESOURCES;\r
-  }\r
-\r
-  if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
-    QuestionId = GetFreeQuestionId ();\r
-  } else {\r
-    if (ChekQuestionIdFree (QuestionId) == FALSE) {\r
-      delete pNode;\r
-      return VFR_RETURN_QUESTIONID_REDEFINED;\r
-    }\r
-    MarkQuestionIdUsed (QuestionId);\r
-  }\r
-  pNode->mQuestionId = QuestionId;\r
-\r
-  pNode->mNext       = mQuestionList;\r
-  mQuestionList      = pNode;\r
-\r
-  gCFormPkg.DoPendingAssign (VarIdStr, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::RegisterOldDateQuestion (\r
-  IN     INT8            *YearVarId,\r
-  IN     INT8            *MonthVarId,\r
-  IN     INT8            *DayVarId,\r
-  IN OUT EFI_QUESTION_ID &QuestionId\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode[3] = {NULL, };\r
-  UINT32           Index;\r
-\r
-  if ((YearVarId == NULL) || (MonthVarId == NULL) || (DayVarId == NULL)) {\r
-    return;\r
-  }\r
-\r
-  if ((pNode[0] = new SVfrQuestionNode (NULL, YearVarId, DATE_YEAR_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[1] = new SVfrQuestionNode (NULL, MonthVarId, DATE_MONTH_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[2] = new SVfrQuestionNode (NULL, DayVarId, DATE_DAY_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-\r
-  if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
-    QuestionId = GetFreeQuestionId ();\r
-  } else {\r
-    if (ChekQuestionIdFree (QuestionId) == FALSE) {\r
-      goto Err;\r
-    }\r
-    MarkQuestionIdUsed (QuestionId);\r
-  }\r
-\r
-  pNode[0]->mQuestionId = QuestionId;\r
-  pNode[1]->mQuestionId = QuestionId;\r
-  pNode[2]->mQuestionId = QuestionId;\r
-  pNode[0]->mNext       = pNode[1];\r
-  pNode[1]->mNext       = pNode[2];\r
-  pNode[2]->mNext       = mQuestionList;\r
-  mQuestionList         = pNode[0];\r
-\r
-  gCFormPkg.DoPendingAssign (YearVarId, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (MonthVarId, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (DayVarId, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-\r
-  return;\r
-\r
-Err:\r
-  for (Index = 0; Index < 3; Index++) {\r
-    if (pNode[Index] != NULL) {\r
-      delete pNode[Index];\r
-    }\r
-  }\r
-  QuestionId = EFI_QUESTION_ID_INVALID;\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::RegisterNewDateQuestion (\r
-  IN     INT8            *Name,\r
-  IN     INT8            *BaseVarId,\r
-  IN OUT EFI_QUESTION_ID &QuestionId\r
-  )\r
-{\r
-  SVfrQuestionNode     *pNode[3] = {NULL, };\r
-  UINT32               Len;\r
-  INT8                 *VarIdStr[3] = {NULL, };\r
-  INT8                 Index;\r
-\r
-  if (BaseVarId == NULL) {\r
-    return;\r
-  }\r
-\r
-  Len = strlen (BaseVarId);\r
-\r
-  VarIdStr[0] = new INT8[Len + strlen (".Year") + 1];\r
-  if (VarIdStr[0] != NULL) {\r
-    strcpy (VarIdStr[0], BaseVarId);\r
-    strcat (VarIdStr[0], ".Year");\r
-  }\r
-  VarIdStr[1] = new INT8[Len + strlen (".Month") + 1];\r
-  if (VarIdStr[1] != NULL) {\r
-    strcpy (VarIdStr[1], BaseVarId);\r
-    strcat (VarIdStr[1], ".Month");\r
-  }\r
-  VarIdStr[2] = new INT8[Len + strlen (".Day") + 1];\r
-  if (VarIdStr[2] != NULL) {\r
-    strcpy (VarIdStr[2], BaseVarId);\r
-    strcat (VarIdStr[2], ".Day");\r
-  }\r
-\r
-  if ((pNode[0] = new SVfrQuestionNode (Name, VarIdStr[0], DATE_YEAR_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[1] = new SVfrQuestionNode (Name, VarIdStr[1], DATE_MONTH_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[2] = new SVfrQuestionNode (Name, VarIdStr[2], DATE_DAY_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-\r
-  if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
-    QuestionId = GetFreeQuestionId ();\r
-  } else {\r
-    if (ChekQuestionIdFree (QuestionId) == FALSE) {\r
-      goto Err;\r
-    }\r
-    MarkQuestionIdUsed (QuestionId);\r
-  }\r
-\r
-  pNode[0]->mQuestionId = QuestionId;\r
-  pNode[1]->mQuestionId = QuestionId;\r
-  pNode[2]->mQuestionId = QuestionId;\r
-  pNode[0]->mNext       = pNode[1];\r
-  pNode[1]->mNext       = pNode[2];\r
-  pNode[2]->mNext       = mQuestionList;\r
-  mQuestionList         = pNode[0];\r
-\r
-  for (Index = 0; Index < 3; Index++) {\r
-    if (VarIdStr[Index] != NULL) {\r
-      delete VarIdStr[Index];\r
-    }\r
-  }\r
-\r
-  gCFormPkg.DoPendingAssign (VarIdStr[0], (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (VarIdStr[1], (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (VarIdStr[2], (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-\r
-  return;\r
-\r
-Err:\r
-  for (Index = 0; Index < 3; Index++) {\r
-    if (pNode[Index] != NULL) {\r
-      delete pNode[Index];\r
-    }\r
-\r
-    if (VarIdStr[Index] != NULL) {\r
-      delete VarIdStr[Index];\r
-    }\r
-  }\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::RegisterOldTimeQuestion (\r
-  IN     INT8            *HourVarId,\r
-  IN     INT8            *MinuteVarId,\r
-  IN     INT8            *SecondVarId,\r
-  IN OUT EFI_QUESTION_ID &QuestionId\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode[3] = {NULL, };\r
-  UINT32           Index;\r
-\r
-  if ((HourVarId == NULL) || (MinuteVarId == NULL) || (SecondVarId == NULL)) {\r
-    return;\r
-  }\r
-\r
-  if ((pNode[0] = new SVfrQuestionNode (NULL, HourVarId, TIME_HOUR_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[1] = new SVfrQuestionNode (NULL, MinuteVarId, TIME_MINUTE_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[2] = new SVfrQuestionNode (NULL, SecondVarId, TIME_SECOND_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-\r
-  if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
-    QuestionId = GetFreeQuestionId ();\r
-  } else {\r
-    if (ChekQuestionIdFree (QuestionId) == FALSE) {\r
-      goto Err;\r
-    }\r
-    MarkQuestionIdUsed (QuestionId);\r
-  }\r
-\r
-  pNode[0]->mQuestionId = QuestionId;\r
-  pNode[1]->mQuestionId = QuestionId;\r
-  pNode[2]->mQuestionId = QuestionId;\r
-  pNode[0]->mNext       = pNode[1];\r
-  pNode[1]->mNext       = pNode[2];\r
-  pNode[2]->mNext       = mQuestionList;\r
-  mQuestionList         = pNode[0];\r
-\r
-  gCFormPkg.DoPendingAssign (HourVarId, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (MinuteVarId, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (SecondVarId, (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-\r
-  return;\r
-\r
-Err:\r
-  for (Index = 0; Index < 3; Index++) {\r
-    if (pNode[Index] != NULL) {\r
-      delete pNode[Index];\r
-    }\r
-  }\r
-  QuestionId = EFI_QUESTION_ID_INVALID;\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::RegisterNewTimeQuestion (\r
-  IN     INT8            *Name,\r
-  IN     INT8            *BaseVarId,\r
-  IN OUT EFI_QUESTION_ID &QuestionId\r
-  )\r
-{\r
-  SVfrQuestionNode     *pNode[3] = {NULL, };\r
-  UINT32               Len;\r
-  INT8                 *VarIdStr[3] = {NULL, };\r
-  INT8                 Index;\r
-\r
-  if (BaseVarId == NULL) {\r
-    return;\r
-  }\r
-\r
-  Len = strlen (BaseVarId);\r
-\r
-  VarIdStr[0] = new INT8[Len + strlen (".Hour") + 1];\r
-  if (VarIdStr[0] != NULL) {\r
-    strcpy (VarIdStr[0], BaseVarId);\r
-    strcat (VarIdStr[0], ".Hour");\r
-  }\r
-  VarIdStr[1] = new INT8[Len + strlen (".Minute") + 1];\r
-  if (VarIdStr[1] != NULL) {\r
-    strcpy (VarIdStr[1], BaseVarId);\r
-    strcat (VarIdStr[1], ".Minute");\r
-  }\r
-  VarIdStr[2] = new INT8[Len + strlen (".Second") + 1];\r
-  if (VarIdStr[2] != NULL) {\r
-    strcpy (VarIdStr[2], BaseVarId);\r
-    strcat (VarIdStr[2], ".Second");\r
-  }\r
-\r
-  if ((pNode[0] = new SVfrQuestionNode (Name, VarIdStr[0], TIME_HOUR_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[1] = new SVfrQuestionNode (Name, VarIdStr[1], TIME_MINUTE_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-  if ((pNode[2] = new SVfrQuestionNode (Name, VarIdStr[2], TIME_SECOND_BITMASK)) == NULL) {\r
-    goto Err;\r
-  }\r
-\r
-  if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
-    QuestionId = GetFreeQuestionId ();\r
-  } else {\r
-    if (ChekQuestionIdFree (QuestionId) == FALSE) {\r
-      goto Err;\r
-    }\r
-    MarkQuestionIdUsed (QuestionId);\r
-  }\r
-\r
-  pNode[0]->mQuestionId = QuestionId;\r
-  pNode[1]->mQuestionId = QuestionId;\r
-  pNode[2]->mQuestionId = QuestionId;\r
-  pNode[0]->mNext       = pNode[1];\r
-  pNode[1]->mNext       = pNode[2];\r
-  pNode[2]->mNext       = mQuestionList;\r
-  mQuestionList         = pNode[0];\r
-\r
-  for (Index = 0; Index < 3; Index++) {\r
-    if (VarIdStr[Index] != NULL) {\r
-      delete VarIdStr[Index];\r
-    }\r
-  }\r
-\r
-  gCFormPkg.DoPendingAssign (VarIdStr[0], (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (VarIdStr[1], (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-  gCFormPkg.DoPendingAssign (VarIdStr[2], (VOID *)&QuestionId, sizeof(EFI_QUESTION_ID));\r
-\r
-  return;\r
-\r
-Err:\r
-  for (Index = 0; Index < 3; Index++) {\r
-    if (pNode[Index] != NULL) {\r
-      delete pNode[Index];\r
-    }\r
-\r
-    if (VarIdStr[Index] != NULL) {\r
-      delete VarIdStr[Index];\r
-    }\r
-  }\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrQuestionDB::UpdateQuestionId (\r
-  IN EFI_QUESTION_ID   QId,\r
-  IN EFI_QUESTION_ID   NewQId\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode = NULL;\r
-\r
-  if (ChekQuestionIdFree (NewQId) == FALSE) {\r
-    return VFR_RETURN_REDEFINED;\r
-  }\r
-\r
-  for (pNode = mQuestionList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mQuestionId == QId) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  if (pNode == NULL) {\r
-    return VFR_RETURN_UNDEFINED;\r
-  }\r
-\r
-  MarkQuestionIdUnused (QId);\r
-  pNode->mQuestionId = NewQId;\r
-  MarkQuestionIdUsed (NewQId);\r
-\r
-  gCFormPkg.DoPendingAssign (pNode->mVarIdStr, (VOID *)&NewQId, sizeof(EFI_QUESTION_ID));\r
-\r
-  return VFR_RETURN_SUCCESS;\r
-}\r
-\r
-VOID\r
-CVfrQuestionDB::GetQuestionId (\r
-  IN  INT8              *Name,\r
-  IN  INT8              *VarIdStr,\r
-  OUT EFI_QUESTION_ID   &QuestionId,\r
-  OUT UINT32            &BitMask\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode;\r
-\r
-  QuestionId = EFI_QUESTION_ID_INVALID;\r
-  BitMask    = 0x00000000;\r
-\r
-  if ((Name == NULL) && (VarIdStr == NULL)) {\r
-    return ;\r
-  }\r
-\r
-  for (pNode = mQuestionList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (Name != NULL) {\r
-      if (strcmp (pNode->mName, Name) != 0) {\r
-        continue;\r
-      }\r
-    }\r
-\r
-    if (VarIdStr != NULL) {\r
-      if (strcmp (pNode->mVarIdStr, VarIdStr) != 0) {\r
-        continue;\r
-      }\r
-       }\r
-\r
-    QuestionId = pNode->mQuestionId;\r
-    BitMask    = pNode->mBitMask;\r
-    break;\r
-  }\r
-\r
-  return ;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrQuestionDB::FindQuestion (\r
-  IN EFI_QUESTION_ID QuestionId\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode;\r
-\r
-  if (QuestionId == EFI_QUESTION_ID_INVALID) {\r
-    return VFR_RETURN_INVALID_PARAMETER;\r
-  }\r
-\r
-  for (pNode = mQuestionList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (pNode->mQuestionId == QuestionId) {\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return VFR_RETURN_UNDEFINED;\r
-}\r
-\r
-EFI_VFR_RETURN_CODE\r
-CVfrQuestionDB::FindQuestion (\r
-  IN INT8 *Name\r
-  )\r
-{\r
-  SVfrQuestionNode *pNode;\r
-\r
-  if (Name == NULL) {\r
-    return VFR_RETURN_FATAL_ERROR;\r
-  }\r
-\r
-  for (pNode = mQuestionList; pNode != NULL; pNode = pNode->mNext) {\r
-    if (strcmp (pNode->mName, Name) == 0) {\r
-      return VFR_RETURN_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return VFR_RETURN_UNDEFINED;\r
-}\r
-\r