]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/Variable.c
Update for IntelFrameworkModulePkg.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / Variable.c
index f476b40803efe531a7a981e5eee7bd146be660db..c4b83ba0ffa4476d6c2d17a09e9fdb2d45cd9a31 100644 (file)
@@ -449,7 +449,7 @@ Var_UpdateConsoleOption (
                             (EFI_DEVICE_PATH_PROTOCOL *) &Vendor\r
                             );\r
       ASSERT (TerminalDevicePath != NULL);\r
-      ChangeTerminalDevicePath (TerminalDevicePath, TRUE);\r
+      ChangeTerminalDevicePath (&TerminalDevicePath, TRUE);\r
       ConDevicePath = AppendDevicePathInstance (\r
                         ConDevicePath,\r
                         TerminalDevicePath\r
@@ -675,11 +675,11 @@ Var_UpdateDriverOption (
                       );\r
   NewDriverOrderList = AllocateZeroPool (DriverOrderListSize + sizeof (UINT16));\r
   ASSERT (NewDriverOrderList != NULL);\r
-  CopyMem (NewDriverOrderList, DriverOrderList, DriverOrderListSize);\r
-  NewDriverOrderList[DriverOrderListSize / sizeof (UINT16)] = Index;\r
   if (DriverOrderList != NULL) {\r
+    CopyMem (NewDriverOrderList, DriverOrderList, DriverOrderListSize);\r
     EfiLibDeleteVariable (L"DriverOrder", &gEfiGlobalVariableGuid);\r
   }\r
+  NewDriverOrderList[DriverOrderListSize / sizeof (UINT16)] = Index;\r
 \r
   Status = gRT->SetVariable (\r
                   L"DriverOrder",\r
@@ -842,14 +842,13 @@ Var_UpdateBootOption (
                     &gEfiGlobalVariableGuid,\r
                     &BootOrderListSize\r
                     );\r
-\r
+  ASSERT (BootOrderList != NULL);\r
   NewBootOrderList = AllocateZeroPool (BootOrderListSize + sizeof (UINT16));\r
   ASSERT (NewBootOrderList != NULL);\r
   CopyMem (NewBootOrderList, BootOrderList, BootOrderListSize);\r
   NewBootOrderList[BootOrderListSize / sizeof (UINT16)] = Index;\r
 \r
   if (BootOrderList != NULL) {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
     FreePool (BootOrderList);\r
   }\r
 \r
@@ -949,9 +948,10 @@ Var_UpdateBootOrder (
 {\r
   EFI_STATUS  Status;\r
   UINT16      Index;\r
+  UINT16      OrderIndex;\r
   UINT16      *BootOrderList;\r
-  UINT16      *NewBootOrderList;\r
   UINTN       BootOrderListSize;\r
+  UINT16      OptionNumber;\r
 \r
   BootOrderList     = NULL;\r
   BootOrderListSize = 0;\r
@@ -964,41 +964,40 @@ Var_UpdateBootOrder (
                     &gEfiGlobalVariableGuid,\r
                     &BootOrderListSize\r
                     );\r
-\r
-  NewBootOrderList = AllocateZeroPool (BootOrderListSize);\r
-  if (NewBootOrderList == NULL) {\r
+  if (BootOrderList == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  //\r
-  // If exists, delete it to hold new BootOrder\r
-  //\r
-  if (BootOrderList != NULL) {\r
-    EfiLibDeleteVariable (L"BootOrder", &gEfiGlobalVariableGuid);\r
-    FreePool (BootOrderList);\r
-  }\r
-\r
   ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.OptionOrder) / sizeof (CallbackData->BmmFakeNvData.OptionOrder[0])));\r
-  for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-    NewBootOrderList[Index] = (UINT16) (CallbackData->BmmFakeNvData.OptionOrder[Index] - 1);\r
+\r
+  for (OrderIndex = 0; (OrderIndex < BootOptionMenu.MenuNumber) && (CallbackData->BmmFakeNvData.OptionOrder[OrderIndex] != 0); OrderIndex++) {\r
+    for (Index = OrderIndex; Index < BootOrderListSize / sizeof (UINT16); Index++) {\r
+      if ((BootOrderList[Index] == (UINT16) (CallbackData->BmmFakeNvData.OptionOrder[OrderIndex] - 1)) && (OrderIndex != Index)) {\r
+        OptionNumber = BootOrderList[Index];\r
+        CopyMem (&BootOrderList[OrderIndex + 1], &BootOrderList[OrderIndex], (Index - OrderIndex) * sizeof (UINT16));\r
+        BootOrderList[OrderIndex] = OptionNumber;\r
+      }\r
+    }\r
   }\r
 \r
+  GroupMultipleLegacyBootOption4SameType (\r
+    BootOrderList,\r
+    BootOrderListSize / sizeof (UINT16)\r
+    );\r
+\r
   Status = gRT->SetVariable (\r
                   L"BootOrder",\r
                   &gEfiGlobalVariableGuid,\r
                   VAR_FLAG,\r
                   BootOrderListSize,\r
-                  NewBootOrderList\r
+                  BootOrderList\r
                   );\r
-  FreePool (NewBootOrderList);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
+  FreePool (BootOrderList);\r
 \r
   BOpt_FreeMenu (&BootOptionMenu);\r
   BOpt_GetBootOptions (CallbackData);\r
 \r
-  return EFI_SUCCESS;\r
+  return Status;\r
 \r
 }\r
 \r
@@ -1072,14 +1071,14 @@ Var_UpdateDriverOrder (
 }\r
 \r
 /**\r
-  Update the legacy BBS boot option. L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable\r
+  Update the legacy BBS boot option. VAR_LEGACY_DEV_ORDER and gEfiLegacyDevOrderVariableGuid EFI Variable\r
   is udpated with the new Legacy Boot order. The EFI Variable of "Boot####" and gEfiGlobalVariableGuid\r
   is also updated.\r
 \r
   @param CallbackData    The context data for BMM.\r
 \r
   @return EFI_SUCCESS           The function completed successfully.\r
-  @retval EFI_NOT_FOUND         If L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable can be found.\r
+  @retval EFI_NOT_FOUND         If VAR_LEGACY_DEV_ORDER and gEfiLegacyDevOrderVariableGuid EFI Variable can be found.\r
   @retval EFI_OUT_OF_RESOURCES  Fail to allocate memory resource\r
 **/\r
 EFI_STATUS\r
@@ -1092,84 +1091,71 @@ Var_UpdateBBSOption (
   VOID                        *BootOptionVar;\r
   CHAR16                      VarName[100];\r
   UINTN                       OptionSize;\r
-  UINT8                       *Ptr;\r
   EFI_STATUS                  Status;\r
-  CHAR16                      DescString[100];\r
-  CHAR8                       DescAsciiString[100];\r
-  UINTN                       NewOptionSize;\r
-  UINT8                       *NewOptionPtr;\r
-  UINT8                       *TempPtr;\r
   UINT32                      *Attribute;\r
   BM_MENU_OPTION              *OptionMenu;\r
-  BM_LEGACY_DEVICE_CONTEXT    *LegacyDeviceContext;\r
   UINT8                       *LegacyDev;\r
   UINT8                       *VarData;\r
   UINTN                       VarSize;\r
-  BM_MENU_ENTRY               *NewMenuEntry;\r
-  BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;\r
+  LEGACY_DEV_ORDER_ENTRY      *DevOrder;\r
   UINT8                       *OriginalPtr;\r
   UINT8                       *DisMap;\r
   UINTN                       Pos;\r
   UINTN                       Bit;\r
   UINT16                      *NewOrder;\r
   UINT16                      Tmp;\r
+  UINT16                      *EnBootOption;\r
+  UINTN                       EnBootOptionCount;\r
+  UINT16                      *DisBootOption;\r
+  UINTN                       DisBootOptionCount;\r
+  UINT16                      *BootOrder;\r
 \r
-  LegacyDeviceContext = NULL;\r
   DisMap              = NULL;\r
   NewOrder            = NULL;\r
 \r
-  if (FORM_SET_FD_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-    OptionMenu            = (BM_MENU_OPTION *) &LegacyFDMenu;\r
-    LegacyDev             = CallbackData->BmmFakeNvData.LegacyFD;\r
-    CallbackData->BbsType = BBS_FLOPPY;\r
-  } else {\r
-    if (FORM_SET_HD_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
+  switch (CallbackData->BmmPreviousPageId) {\r
+    case FORM_SET_FD_ORDER_ID:\r
+      OptionMenu            = (BM_MENU_OPTION *) &LegacyFDMenu;\r
+      LegacyDev             = CallbackData->BmmFakeNvData.LegacyFD;\r
+      CallbackData->BbsType = BBS_FLOPPY;\r
+      break;\r
+\r
+    case FORM_SET_HD_ORDER_ID:\r
       OptionMenu            = (BM_MENU_OPTION *) &LegacyHDMenu;\r
       LegacyDev             = CallbackData->BmmFakeNvData.LegacyHD;\r
       CallbackData->BbsType = BBS_HARDDISK;\r
-    } else {\r
-      if (FORM_SET_CD_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-        OptionMenu            = (BM_MENU_OPTION *) &LegacyCDMenu;\r
-        LegacyDev             = CallbackData->BmmFakeNvData.LegacyCD;\r
-        CallbackData->BbsType = BBS_CDROM;\r
-      } else {\r
-        if (FORM_SET_NET_ORDER_ID == CallbackData->BmmPreviousPageId) {\r
-          OptionMenu            = (BM_MENU_OPTION *) &LegacyNETMenu;\r
-          LegacyDev             = CallbackData->BmmFakeNvData.LegacyNET;\r
-          CallbackData->BbsType = BBS_EMBED_NETWORK;\r
-        } else {\r
-          OptionMenu            = (BM_MENU_OPTION *) &LegacyBEVMenu;\r
-          LegacyDev             = CallbackData->BmmFakeNvData.LegacyBEV;\r
-          CallbackData->BbsType = BBS_BEV_DEVICE;\r
-        }\r
-      }\r
-    }\r
+      break;\r
+\r
+    case FORM_SET_CD_ORDER_ID:\r
+      OptionMenu            = (BM_MENU_OPTION *) &LegacyCDMenu;\r
+      LegacyDev             = CallbackData->BmmFakeNvData.LegacyCD;\r
+      CallbackData->BbsType = BBS_CDROM;\r
+      break;\r
+\r
+    case FORM_SET_NET_ORDER_ID:\r
+      OptionMenu            = (BM_MENU_OPTION *) &LegacyNETMenu;\r
+      LegacyDev             = CallbackData->BmmFakeNvData.LegacyNET;\r
+      CallbackData->BbsType = BBS_EMBED_NETWORK;\r
+      break;\r
+\r
+    default:\r
+      ASSERT (FORM_SET_BEV_ORDER_ID == CallbackData->BmmPreviousPageId);\r
+      OptionMenu            = (BM_MENU_OPTION *) &LegacyBEVMenu;\r
+      LegacyDev             = CallbackData->BmmFakeNvData.LegacyBEV;\r
+      CallbackData->BbsType = BBS_BEV_DEVICE;\r
+      break;\r
   }\r
 \r
   DisMap  = CallbackData->BmmOldFakeNVData.DisableMap;\r
   Status  = EFI_SUCCESS;\r
 \r
-  //\r
-  // Find the first device's context\r
-  // If all devices are disabled( 0xFF == LegacyDev[0]), LegacyDeviceContext can be set to any VariableContext\r
-  // because we just use it to fill the desc string, and user can not see the string in UI\r
-  //\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    NewMenuEntry        = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    LegacyDeviceContext = (BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (0xFF != LegacyDev[0] && LegacyDev[0] == LegacyDeviceContext->Index) {\r
-      DEBUG ((DEBUG_ERROR, "DescStr: %s\n", LegacyDeviceContext->Description));\r
-      break;\r
-    }\r
-  }\r
-  ASSERT (LegacyDeviceContext != NULL);\r
 \r
   //\r
   // Update the Variable "LegacyDevOrder"\r
   //\r
   VarData = (UINT8 *) BdsLibGetVariableAndSize (\r
                         VAR_LEGACY_DEV_ORDER,\r
-                        &EfiLegacyDevOrderGuid,\r
+                        &gEfiLegacyDevOrderVariableGuid,\r
                         &VarSize\r
                         );\r
 \r
@@ -1178,26 +1164,25 @@ Var_UpdateBBSOption (
   }\r
 \r
   OriginalPtr = VarData;\r
-  DevOrder    = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
+  DevOrder    = (LEGACY_DEV_ORDER_ENTRY *) VarData;\r
 \r
-  while (VarData < VarData + VarSize) {\r
+  while (VarData < OriginalPtr + VarSize) {\r
     if (DevOrder->BbsType == CallbackData->BbsType) {\r
       break;\r
     }\r
 \r
-    VarData += sizeof (BBS_TYPE);\r
-    VarData += *(UINT16 *) VarData;\r
-    DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
+    VarData += sizeof (BBS_TYPE) + DevOrder->Length;\r
+    DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData;\r
   }\r
 \r
-  if (VarData >= VarData + VarSize) {\r
+  if (VarData >= OriginalPtr + VarSize) {\r
     FreePool (OriginalPtr);\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  NewOrder = (UINT16 *) AllocateZeroPool (DevOrder->Length - sizeof (UINT16));\r
+  NewOrder = AllocateZeroPool (DevOrder->Length - sizeof (DevOrder->Length));\r
   if (NewOrder == NULL) {\r
-    FreePool (VarData);\r
+    FreePool (OriginalPtr);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
@@ -1215,8 +1200,7 @@ Var_UpdateBBSOption (
   // so we use DisMap to set en/dis state of each item in NewOrder array\r
   //\r
   for (Index2 = 0; Index2 < OptionMenu->MenuNumber; Index2++) {\r
-    Tmp = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index2 * sizeof (UINT16));\r
-    Tmp &= 0xFF;\r
+    Tmp = (UINT16) (DevOrder->Data[Index2] & 0xFF);\r
     Pos = Tmp / 8;\r
     Bit = 7 - (Tmp % 8);\r
     if ((DisMap[Pos] & (1 << Bit)) != 0) {\r
@@ -1226,157 +1210,115 @@ Var_UpdateBBSOption (
   }\r
 \r
   CopyMem (\r
-    (UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16),\r
+    DevOrder->Data,\r
     NewOrder,\r
-    DevOrder->Length - sizeof (UINT16)\r
+    DevOrder->Length - sizeof (DevOrder->Length)\r
     );\r
   FreePool (NewOrder);\r
 \r
   Status = gRT->SetVariable (\r
                   VAR_LEGACY_DEV_ORDER,\r
-                  &EfiLegacyDevOrderGuid,\r
+                  &gEfiLegacyDevOrderVariableGuid,\r
                   VAR_FLAG,\r
                   VarSize,\r
                   OriginalPtr\r
                   );\r
 \r
-  FreePool (OriginalPtr);\r
 \r
   //\r
-  // Update Optional Data of Boot####\r
+  // Update BootOrder and Boot####.Attribute\r
   //\r
-  BootOptionVar = GetLegacyBootOptionVar (CallbackData->BbsType, &Index, &OptionSize);\r
-\r
-  if (BootOptionVar != NULL) {\r
-    CopyMem (\r
-      DescString,\r
-      LegacyDeviceContext->Description,\r
-      StrSize (LegacyDeviceContext->Description)\r
-      );\r
-\r
-       UnicodeStrToAsciiStr((CONST CHAR16*)&DescString, (CHAR8 *)&DescAsciiString);\r
-\r
-    NewOptionSize = sizeof (UINT32) + sizeof (UINT16) + StrSize (DescString) +\r
-                    sizeof (BBS_BBS_DEVICE_PATH);\r
-    NewOptionSize += AsciiStrLen (DescAsciiString) +\r
-                    END_DEVICE_PATH_LENGTH + sizeof (BBS_TABLE) + sizeof (UINT16);\r
-\r
-    UnicodeSPrint (VarName, 100, L"Boot%04x", Index);\r
+  // 1. Re-order the Option Number in BootOrder according to Legacy Dev Order\r
+  //\r
+  ASSERT (OptionMenu->MenuNumber == DevOrder->Length / sizeof (UINT16) - 1);\r
+  BootOrder = BdsLibGetVariableAndSize (\r
+                L"BootOrder",\r
+                &gEfiGlobalVariableGuid,\r
+                &VarSize\r
+                );\r
+  ASSERT (BootOrder != NULL);\r
+\r
+  DisBootOption = AllocatePool (VarSize);\r
+  ASSERT (DisBootOption != NULL);\r
+  EnBootOption  = AllocatePool (VarSize);\r
+  ASSERT (EnBootOption  != NULL);\r
+  \r
+  OrderLegacyBootOption4SameType (\r
+    BootOrder,\r
+    VarSize / sizeof (UINT16),\r
+    DevOrder->Data,\r
+    DevOrder->Length / sizeof (UINT16) - 1,\r
+    EnBootOption,\r
+    &EnBootOptionCount,\r
+    DisBootOption,\r
+    &DisBootOptionCount\r
+    );\r
+  \r
+  Status = gRT->SetVariable (\r
+                    L"BootOrder",\r
+                    &gEfiGlobalVariableGuid,\r
+                    VAR_FLAG,\r
+                    VarSize,\r
+                    BootOrder\r
+                    );\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
-    Ptr       = BootOptionVar;\r
+  FreePool (BootOrder);\r
 \r
-    Attribute = (UINT32 *) Ptr;\r
-    *Attribute |= LOAD_OPTION_ACTIVE;\r
-    if (LegacyDev[0] == 0xFF) {\r
-      //\r
-      // Disable this legacy boot option\r
-      //\r
+  //\r
+  // 2. Deactivate the DisBootOption and activate the EnBootOption\r
+  //\r
+  for (Index = 0; Index < DisBootOptionCount; Index++) {\r
+    UnicodeSPrint (VarName, sizeof (VarName), L"Boot%04x", DisBootOption[Index]);\r
+    BootOptionVar = BdsLibGetVariableAndSize (\r
+                      VarName,\r
+                      &gEfiGlobalVariableGuid,\r
+                      &OptionSize\r
+                      );\r
+    if (BootOptionVar != NULL) {\r
+      Attribute   = (UINT32 *) BootOptionVar;\r
       *Attribute &= ~LOAD_OPTION_ACTIVE;\r
-    }\r
-\r
-    Ptr += sizeof (UINT32);\r
 \r
-    Ptr += sizeof (UINT16);\r
-    Ptr += StrSize ((CHAR16 *) Ptr);\r
+      Status = gRT->SetVariable (\r
+                      VarName,\r
+                      &gEfiGlobalVariableGuid,\r
+                      VAR_FLAG,\r
+                      OptionSize,\r
+                      BootOptionVar\r
+                      );\r
 \r
-    NewOptionPtr = AllocateZeroPool (NewOptionSize);\r
-    if (NewOptionPtr == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
+      FreePool (BootOptionVar);\r
     }\r
+  }\r
 \r
-    TempPtr = NewOptionPtr;\r
-\r
-    //\r
-    // Attribute\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      BootOptionVar,\r
-      sizeof (UINT32)\r
-      );\r
-\r
-    TempPtr += sizeof (UINT32);\r
-\r
-    //\r
-    // BBS device path Length\r
-    //\r
-    *((UINT16 *) TempPtr) = (UINT16) (sizeof (BBS_BBS_DEVICE_PATH) +\r
-                         AsciiStrLen (DescAsciiString) +\r
-                         END_DEVICE_PATH_LENGTH);\r
-\r
-    TempPtr += sizeof (UINT16);\r
-\r
-    //\r
-    // Description string\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      DescString,\r
-      StrSize (DescString)\r
-      );\r
-\r
-    TempPtr += StrSize (DescString);\r
-\r
-    //\r
-    // BBS device path\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      Ptr,\r
-      sizeof (BBS_BBS_DEVICE_PATH)\r
-      );\r
-\r
-    CopyMem (\r
-      ((BBS_BBS_DEVICE_PATH*) TempPtr)->String,\r
-      DescAsciiString,\r
-      AsciiStrSize (DescAsciiString)\r
-      );\r
-\r
-    SetDevicePathNodeLength (\r
-          (EFI_DEVICE_PATH_PROTOCOL *) TempPtr,\r
-          sizeof (BBS_BBS_DEVICE_PATH) + AsciiStrLen (DescAsciiString)\r
-          );\r
-\r
-    TempPtr += sizeof (BBS_BBS_DEVICE_PATH) + AsciiStrLen (DescAsciiString);\r
-\r
-    //\r
-    // End node\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      EndDevicePath,\r
-      END_DEVICE_PATH_LENGTH\r
-      );\r
-    TempPtr += END_DEVICE_PATH_LENGTH;\r
-\r
-    //\r
-    // Now TempPtr point to optional data, i.e. Bbs Table\r
-    //\r
-    CopyMem (\r
-      TempPtr,\r
-      LegacyDeviceContext->BbsTable,\r
-      sizeof (BBS_TABLE)\r
-      );\r
-\r
-    //\r
-    // Now TempPtr point to BBS index\r
-    //\r
-    TempPtr += sizeof (BBS_TABLE);\r
-    *((UINT16 *) TempPtr) = (UINT16) LegacyDeviceContext->Index;\r
+  for (Index = 0; Index < EnBootOptionCount; Index++) {\r
+    UnicodeSPrint (VarName, sizeof (VarName), L"Boot%04x", EnBootOption[Index]);\r
+    BootOptionVar = BdsLibGetVariableAndSize (\r
+                      VarName,\r
+                      &gEfiGlobalVariableGuid,\r
+                      &OptionSize\r
+                      );\r
+    if (BootOptionVar != NULL) {\r
+      Attribute   = (UINT32 *) BootOptionVar;\r
+      *Attribute |= LOAD_OPTION_ACTIVE;\r
 \r
-    Status = gRT->SetVariable (\r
-                    VarName,\r
-                    &gEfiGlobalVariableGuid,\r
-                    VAR_FLAG,\r
-                    NewOptionSize,\r
-                    NewOptionPtr\r
-                    );\r
+      Status = gRT->SetVariable (\r
+                      VarName,\r
+                      &gEfiGlobalVariableGuid,\r
+                      VAR_FLAG,\r
+                      OptionSize,\r
+                      BootOptionVar\r
+                      );\r
 \r
-    FreePool (NewOptionPtr);\r
-    FreePool (BootOptionVar);\r
+      FreePool (BootOptionVar);\r
+    }\r
   }\r
 \r
   BOpt_GetBootOptions (CallbackData);\r
+\r
+  FreePool (OriginalPtr);\r
+  FreePool (EnBootOption);\r
+  FreePool (DisBootOption);\r
   return Status;\r
 }\r
 \r
@@ -1402,8 +1344,8 @@ Var_UpdateConMode (
 \r
   Status = gST->ConOut->QueryMode (gST->ConOut, Mode, &(ModeInfo.Column), &(ModeInfo.Row));\r
   if (!EFI_ERROR(Status)) {\r
-    PcdSet32 (PcdConOutColumn, (UINT32) ModeInfo.Column);\r
-    PcdSet32 (PcdConOutRow, (UINT32) ModeInfo.Row);\r
+    PcdSet32 (PcdSetupConOutColumn, (UINT32) ModeInfo.Column);\r
+    PcdSet32 (PcdSetupConOutRow, (UINT32) ModeInfo.Row);\r
   }\r
 \r
   return EFI_SUCCESS;\r