public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Laszlo Ersek" <lersek@redhat.com>
To: devel@edk2.groups.io
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Jiewen Yao <jiewen.yao@intel.com>
Subject: [edk2-devel] [PATCH 09/37] OvmfPkg: remove Csm/BiosThunk/VideoDxe
Date: Sat, 11 Nov 2023 00:57:52 +0100	[thread overview]
Message-ID: <20231110235820.644381-10-lersek@redhat.com> (raw)
In-Reply-To: <20231110235820.644381-1-lersek@redhat.com>

Csm/BiosThunk/VideoDxe is not used by any platform at this point, remove
it.

This patch removes mentions of the following CSM resources from the source
code:

- GUIDs (protocols or otherwise):
  - gEfiLegacyBiosGuid
  - gEfiLegacyBiosProtocolGuid
  - gEfiVgaMiniPortProtocolGuid

- headers:
  - FrameworkDxe.h
  - Guid/LegacyBios.h
  - Protocol/LegacyBios.h
  - Protocol/VgaMiniPort.h

- PCDs:
  - PcdBiosVideoCheckVbeEnable
  - PcdBiosVideoCheckVgaEnable
  - PcdBiosVideoSetTextVgaModeEnable

which extends the list of resources scheduled for removal to:

- GUIDs (protocols or otherwise):
  - gEfiLegacyBiosGuid
  - gEfiLegacyBiosProtocolGuid
  - gEfiVgaMiniPortProtocolGuid

- headers:
  - FrameworkDxe.h
  - Guid/LegacyBios.h
  - Protocol/LegacyBios.h
  - Protocol/VgaMiniPort.h

- PCDs:
  - PcdBiosVideoCheckVbeEnable
  - PcdBiosVideoCheckVgaEnable
  - PcdBiosVideoSetTextVgaModeEnable

Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4588
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---
 OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxe.uni      |   17 -
 OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxeExtra.uni |   14 -
 OvmfPkg/Csm/BiosThunk/VideoDxe/VideoDxe.inf          |   78 -
 OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h           |  524 ---
 OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h  |  459 ---
 OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c           | 3357 --------------------
 OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c       |  304 --
 7 files changed, 4753 deletions(-)

diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxe.uni b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxe.uni
deleted file mode 100644
index 326d9de8220f..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxe.uni
+++ /dev/null
@@ -1,17 +0,0 @@
-// /** @file
-// Video driver based on legacy bios.
-//
-// This driver by using Legacy Bios protocol service to support csm Video
-// and produce Graphics Output Protocol.
-//
-// Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT             #language en-US "Video driver based on legacy bios"
-
-#string STR_MODULE_DESCRIPTION          #language en-US "This driver uses the Legacy Bios protocol service to utilize the CSM Video Support and produce the Graphics Output Protocol."
-
diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxeExtra.uni b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxeExtra.uni
deleted file mode 100644
index 23fb8fe0b0ba..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideoDxeExtra.uni
+++ /dev/null
@@ -1,14 +0,0 @@
-// /** @file
-// BiosVideoDxe Localized Strings and Content
-//
-// Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved.<BR>
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#string STR_PROPERTIES_MODULE_NAME
-#language en-US
-"Legacy Video DXE Driver"
-
-
diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/VideoDxe.inf b/OvmfPkg/Csm/BiosThunk/VideoDxe/VideoDxe.inf
deleted file mode 100644
index 1ed4020661fa..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/VideoDxe.inf
+++ /dev/null
@@ -1,78 +0,0 @@
-## @file
-# Video driver based on legacy bios.
-#
-# This driver by using Legacy Bios protocol service to support csm Video
-# and produce Graphics Output Protocol.
-#
-# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = BiosVideoDxe
-  MODULE_UNI_FILE                = BiosVideoDxe.uni
-  FILE_GUID                      = 8669E6C9-842B-4B49-BCC3-32C96D244750
-  MODULE_TYPE                    = UEFI_DRIVER
-  VERSION_STRING                 = 1.0
-
-  ENTRY_POINT                    = BiosVideoEntryPoint
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-#  VALID_ARCHITECTURES           = IA32 X64 EBC
-#
-#  DRIVER_BINDING                =  gBiosVideoDriverBinding
-#  COMPONENT_NAME                =  gBiosVideoComponentName
-#
-
-[Sources]
-  BiosVideo.c
-  BiosVideo.h
-  ComponentName.c
-  VesaBiosExtensions.h
-
-[Packages]
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-  OvmfPkg/OvmfPkg.dec
-
-[LibraryClasses]
-  MemoryAllocationLib
-  DevicePathLib
-  UefiLib
-  UefiBootServicesTableLib
-  UefiDriverEntryPoint
-  BaseMemoryLib
-  ReportStatusCodeLib
-  DebugLib
-  PcdLib
-
-
-[Guids]
-  gEfiLegacyBiosGuid                            ## PRODUCES  ##GUID # Install Legacy BIOS GUID to mark this driver as a BIOS Thunk Driver
-  gEfiEventExitBootServicesGuid                 ## CONSUMES  ##Event
-
-[Protocols]
-  gEfiVgaMiniPortProtocolGuid                   ## BY_START
-  gEfiEdidDiscoveredProtocolGuid                ## BY_START
-  gEfiGraphicsOutputProtocolGuid                ## BY_START
-  gEfiEdidActiveProtocolGuid                    ## BY_START
-  gEfiLegacyBiosProtocolGuid                    ## CONSUMES
-  gEfiPciIoProtocolGuid                         ## TO_START
-  gEfiDevicePathProtocolGuid                    ## TO_START
-  gEfiDevicePathProtocolGuid                    ## BY_START
-  gEfiEdidOverrideProtocolGuid                  ## SOMETIMES_CONSUMES
-
-[Pcd]
-  gUefiOvmfPkgTokenSpaceGuid.PcdBiosVideoSetTextVgaModeEnable                 ## CONSUMES
-  gUefiOvmfPkgTokenSpaceGuid.PcdBiosVideoCheckVbeEnable                       ## CONSUMES
-  gUefiOvmfPkgTokenSpaceGuid.PcdBiosVideoCheckVgaEnable                       ## SOMETIMES_CONSUMES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution                 ## SOMETIMES_CONSUMES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution                   ## SOMETIMES_CONSUMES
-
-[UserExtensions.TianoCore."ExtraFiles"]
-  BiosVideoDxeExtra.uni
diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h
deleted file mode 100644
index a2cb624d5a9a..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.h
+++ /dev/null
@@ -1,524 +0,0 @@
-/** @file
-
-Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _BIOS_GRAPHICS_OUTPUT_H_
-#define _BIOS_GRAPHICS_OUTPUT_H_
-
-#include <FrameworkDxe.h>
-
-#include <Protocol/PciIo.h>
-#include <Protocol/EdidActive.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/EdidDiscovered.h>
-#include <Protocol/LegacyBios.h>
-#include <Protocol/VgaMiniPort.h>
-#include <Protocol/GraphicsOutput.h>
-#include <Protocol/EdidOverride.h>
-
-#include <Guid/StatusCodeDataTypeId.h>
-#include <Guid/LegacyBios.h>
-#include <Guid/EventGroup.h>
-
-#include <Library/PcdLib.h>
-#include <Library/DebugLib.h>
-#include <Library/ReportStatusCodeLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-#include <Library/DevicePathLib.h>
-#include <Library/MemoryAllocationLib.h>
-
-#include <IndustryStandard/Pci.h>
-#include "VesaBiosExtensions.h"
-
-//
-// Packed format support: The number of bits reserved for each of the colors and the actual
-// position of RGB in the frame buffer is specified in the VBE Mode information
-//
-typedef struct {
-  UINT8    Position; // Position of the color
-  UINT8    Mask;     // The number of bits expressed as a mask
-} BIOS_VIDEO_COLOR_PLACEMENT;
-
-//
-// BIOS Graphics Output Graphical Mode Data
-//
-typedef struct {
-  UINT16                        VbeModeNumber;
-  UINT16                        BytesPerScanLine;
-  VOID                          *LinearFrameBuffer;
-  UINTN                         FrameBufferSize;
-  UINT32                        HorizontalResolution;
-  UINT32                        VerticalResolution;
-  UINT32                        ColorDepth;
-  UINT32                        RefreshRate;
-  UINT32                        BitsPerPixel;
-  BIOS_VIDEO_COLOR_PLACEMENT    Red;
-  BIOS_VIDEO_COLOR_PLACEMENT    Green;
-  BIOS_VIDEO_COLOR_PLACEMENT    Blue;
-  BIOS_VIDEO_COLOR_PLACEMENT    Reserved;
-  EFI_GRAPHICS_PIXEL_FORMAT     PixelFormat;
-  EFI_PIXEL_BITMASK             PixelBitMask;
-} BIOS_VIDEO_MODE_DATA;
-
-//
-// BIOS video child handle private data Structure
-//
-#define BIOS_VIDEO_DEV_SIGNATURE  SIGNATURE_32 ('B', 'V', 'M', 'p')
-
-typedef struct {
-  UINTN                                          Signature;
-  EFI_HANDLE                                     Handle;
-
-  //
-  // Consumed Protocols
-  //
-  EFI_PCI_IO_PROTOCOL                            *PciIo;
-  EFI_LEGACY_BIOS_PROTOCOL                       *LegacyBios;
-
-  //
-  // Produced Protocols
-  //
-  EFI_GRAPHICS_OUTPUT_PROTOCOL                   GraphicsOutput;
-  EFI_EDID_DISCOVERED_PROTOCOL                   EdidDiscovered;
-  EFI_EDID_ACTIVE_PROTOCOL                       EdidActive;
-  EFI_VGA_MINI_PORT_PROTOCOL                     VgaMiniPort;
-
-  //
-  // General fields
-  //
-  BOOLEAN                                        VgaCompatible;
-  BOOLEAN                                        ProduceGraphicsOutput;
-
-  //
-  // Graphics Output Protocol related fields
-  //
-  BOOLEAN                                        HardwareNeedsStarting;
-  UINTN                                          CurrentMode;
-  UINTN                                          MaxMode;
-  BIOS_VIDEO_MODE_DATA                           *ModeData;
-  UINT8                                          *LineBuffer;
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL                  *VbeFrameBuffer;
-  UINT8                                          *VgaFrameBuffer;
-
-  //
-  // VESA Bios Extensions related fields
-  //
-  UINTN                                          NumberOfPagesBelow1MB;    // Number of 4KB pages in PagesBelow1MB
-  EFI_PHYSICAL_ADDRESS                           PagesBelow1MB;            // Buffer for all VBE Information Blocks
-  VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK         *VbeInformationBlock;     // 0x200 bytes.  Must be allocated below 1MB
-  VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK    *VbeModeInformationBlock; // 0x100 bytes.  Must be allocated below 1MB
-  VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK           *VbeEdidDataBlock;        // 0x80  bytes.  Must be allocated below 1MB
-  VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK    *VbeCrtcInformationBlock; // 59 bytes.  Must be allocated below 1MB
-  UINTN                                          VbeSaveRestorePages;      // Number of 4KB pages in VbeSaveRestoreBuffer
-  EFI_PHYSICAL_ADDRESS                           VbeSaveRestoreBuffer;     // Must be allocated below 1MB
-  //
-  // Status code
-  //
-  EFI_DEVICE_PATH_PROTOCOL                       *GopDevicePath;
-
-  EFI_EVENT                                      ExitBootServicesEvent;
-} BIOS_VIDEO_DEV;
-
-#define BIOS_VIDEO_DEV_FROM_PCI_IO_THIS(a)           CR (a, BIOS_VIDEO_DEV, PciIo, BIOS_VIDEO_DEV_SIGNATURE)
-#define BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS(a)  CR (a, BIOS_VIDEO_DEV, GraphicsOutput, BIOS_VIDEO_DEV_SIGNATURE)
-#define BIOS_VIDEO_DEV_FROM_VGA_MINI_PORT_THIS(a)    CR (a, BIOS_VIDEO_DEV, VgaMiniPort, BIOS_VIDEO_DEV_SIGNATURE)
-
-#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER  0xffff
-
-//
-// Global Variables
-//
-extern EFI_DRIVER_BINDING_PROTOCOL   gBiosVideoDriverBinding;
-extern EFI_COMPONENT_NAME_PROTOCOL   gBiosVideoComponentName;
-extern EFI_COMPONENT_NAME2_PROTOCOL  gBiosVideoComponentName2;
-
-//
-// Driver Binding Protocol functions
-//
-
-/**
-  Supported.
-
-  @param  This                   Pointer to driver binding protocol
-  @param  Controller             Controller handle to connect
-  @param  RemainingDevicePath    A pointer to the remaining portion of a device
-                                 path
-
-  @retval EFI_STATUS             EFI_SUCCESS:This controller can be managed by this
-                                 driver, Otherwise, this controller cannot be
-                                 managed by this driver
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoDriverBindingSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  );
-
-/**
-  Install Graphics Output Protocol onto VGA device handles.
-
-  @param  This                   Pointer to driver binding protocol
-  @param  Controller             Controller handle to connect
-  @param  RemainingDevicePath    A pointer to the remaining portion of a device
-                                 path
-
-  @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoDriverBindingStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  );
-
-/**
-  Stop.
-
-  @param  This                   Pointer to driver binding protocol
-  @param  Controller             Controller handle to connect
-  @param  NumberOfChildren       Number of children handle created by this driver
-  @param  ChildHandleBuffer      Buffer containing child handle created
-
-  @retval EFI_SUCCESS            Driver disconnected successfully from controller
-  @retval EFI_UNSUPPORTED        Cannot find BIOS_VIDEO_DEV structure
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoDriverBindingStop (
-  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN  EFI_HANDLE                   Controller,
-  IN  UINTN                        NumberOfChildren,
-  IN  EFI_HANDLE                   *ChildHandleBuffer
-  );
-
-//
-// Private worker functions
-//
-
-/**
-  Check for VBE device.
-
-  @param  BiosVideoPrivate       Pointer to BIOS_VIDEO_DEV structure
-
-  @retval EFI_SUCCESS            VBE device found
-
-**/
-EFI_STATUS
-BiosVideoCheckForVbe (
-  IN OUT BIOS_VIDEO_DEV  *BiosVideoPrivate
-  );
-
-/**
-  Check for VGA device.
-
-  @param  BiosVideoPrivate       Pointer to BIOS_VIDEO_DEV structure
-
-  @retval EFI_SUCCESS            Standard VGA device found
-
-**/
-EFI_STATUS
-BiosVideoCheckForVga (
-  IN OUT BIOS_VIDEO_DEV  *BiosVideoPrivate
-  );
-
-/**
-  Release resource for BIOS video instance.
-
-  @param  BiosVideoPrivate       Video child device private data structure
-
-**/
-VOID
-BiosVideoDeviceReleaseResource (
-  BIOS_VIDEO_DEV  *BiosVideoPrivate
-  );
-
-//
-// BIOS Graphics Output Protocol functions
-//
-
-/**
-  Graphics Output protocol interface to get video mode.
-
-  @param  This                   Protocol instance pointer.
-  @param  ModeNumber             The mode number to return information on.
-  @param  SizeOfInfo             A pointer to the size, in bytes, of the Info
-                                 buffer.
-  @param  Info                   Caller allocated buffer that returns information
-                                 about ModeNumber.
-
-  @retval EFI_SUCCESS            Mode information returned.
-  @retval EFI_BUFFER_TOO_SMALL   The Info buffer was too small.
-  @retval EFI_DEVICE_ERROR       A hardware error occurred trying to retrieve the
-                                 video mode.
-  @retval EFI_NOT_STARTED        Video display is not initialized. Call SetMode ()
-  @retval EFI_INVALID_PARAMETER  One of the input args was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputQueryMode (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This,
-  IN  UINT32                                ModeNumber,
-  OUT UINTN                                 *SizeOfInfo,
-  OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info
-  );
-
-/**
-  Graphics Output protocol interface to set video mode.
-
-  @param  This                   Protocol instance pointer.
-  @param  ModeNumber             The mode number to be set.
-
-  @retval EFI_SUCCESS            Graphics mode was changed.
-  @retval EFI_DEVICE_ERROR       The device had an error and could not complete the
-                                 request.
-  @retval EFI_UNSUPPORTED        ModeNumber is not supported by this device.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputSetMode (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL  *This,
-  IN  UINT32                        ModeNumber
-  );
-
-/**
-  Graphics Output protocol instance to block transfer for VBE device.
-
-  @param  This                   Pointer to Graphics Output protocol instance
-  @param  BltBuffer              The data to transfer to screen
-  @param  BltOperation           The operation to perform
-  @param  SourceX                The X coordinate of the source for BltOperation
-  @param  SourceY                The Y coordinate of the source for BltOperation
-  @param  DestinationX           The X coordinate of the destination for
-                                 BltOperation
-  @param  DestinationY           The Y coordinate of the destination for
-                                 BltOperation
-  @param  Width                  The width of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Height                 The height of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Delta                  Not used for EfiBltVideoFill and
-                                 EfiBltVideoToVideo operation. If a Delta of 0 is
-                                 used, the entire BltBuffer will be operated on. If
-                                 a subrectangle of the BltBuffer is used, then
-                                 Delta represents the number of bytes in a row of
-                                 the BltBuffer.
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter passed in
-  @retval EFI_SUCCESS            Blt operation success
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputVbeBlt (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL       *This,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL      *BltBuffer  OPTIONAL,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION  BltOperation,
-  IN  UINTN                              SourceX,
-  IN  UINTN                              SourceY,
-  IN  UINTN                              DestinationX,
-  IN  UINTN                              DestinationY,
-  IN  UINTN                              Width,
-  IN  UINTN                              Height,
-  IN  UINTN                              Delta
-  );
-
-/**
-  Graphics Output protocol instance to block transfer for VGA device.
-
-  @param  This                   Pointer to Graphics Output protocol instance
-  @param  BltBuffer              The data to transfer to screen
-  @param  BltOperation           The operation to perform
-  @param  SourceX                The X coordinate of the source for BltOperation
-  @param  SourceY                The Y coordinate of the source for BltOperation
-  @param  DestinationX           The X coordinate of the destination for
-                                 BltOperation
-  @param  DestinationY           The Y coordinate of the destination for
-                                 BltOperation
-  @param  Width                  The width of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Height                 The height of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Delta                  Not used for EfiBltVideoFill and
-                                 EfiBltVideoToVideo operation. If a Delta of 0 is
-                                 used, the entire BltBuffer will be operated on. If
-                                 a subrectangle of the BltBuffer is used, then
-                                 Delta represents the number of bytes in a row of
-                                 the BltBuffer.
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter passed in
-  @retval EFI_SUCCESS            Blt operation success
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputVgaBlt (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL       *This,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL      *BltBuffer  OPTIONAL,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION  BltOperation,
-  IN  UINTN                              SourceX,
-  IN  UINTN                              SourceY,
-  IN  UINTN                              DestinationX,
-  IN  UINTN                              DestinationY,
-  IN  UINTN                              Width,
-  IN  UINTN                              Height,
-  IN  UINTN                              Delta
-  );
-
-//
-// BIOS VGA Mini Port Protocol functions
-//
-
-/**
-  VgaMiniPort protocol interface to set mode.
-
-  @param  This                   Pointer to VgaMiniPort protocol instance
-  @param  ModeNumber             The index of the mode
-
-  @retval EFI_UNSUPPORTED        The requested mode is not supported
-  @retval EFI_SUCCESS            The requested mode is set successfully
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoVgaMiniPortSetMode (
-  IN  EFI_VGA_MINI_PORT_PROTOCOL  *This,
-  IN  UINTN                       ModeNumber
-  );
-
-/**
-  Event handler for Exit Boot Service.
-
-  @param  Event       The event that be signalled when exiting boot service.
-  @param  Context     Pointer to instance of BIOS_VIDEO_DEV.
-
-**/
-VOID
-EFIAPI
-BiosVideoNotifyExitBootServices (
-  IN  EFI_EVENT  Event,
-  IN  VOID       *Context
-  );
-
-//
-// Standard VGA Definitions
-//
-#define VGA_HORIZONTAL_RESOLUTION  640
-#define VGA_VERTICAL_RESOLUTION    480
-#define VGA_NUMBER_OF_BIT_PLANES   4
-#define VGA_PIXELS_PER_BYTE        8
-#define VGA_BYTES_PER_SCAN_LINE    (VGA_HORIZONTAL_RESOLUTION / VGA_PIXELS_PER_BYTE)
-#define VGA_BYTES_PER_BIT_PLANE    (VGA_VERTICAL_RESOLUTION * VGA_BYTES_PER_SCAN_LINE)
-
-#define VGA_GRAPHICS_CONTROLLER_ADDRESS_REGISTER  0x3ce
-#define VGA_GRAPHICS_CONTROLLER_DATA_REGISTER     0x3cf
-
-#define VGA_GRAPHICS_CONTROLLER_SET_RESET_REGISTER  0x00
-
-#define VGA_GRAPHICS_CONTROLLER_ENABLE_SET_RESET_REGISTER  0x01
-
-#define VGA_GRAPHICS_CONTROLLER_COLOR_COMPARE_REGISTER  0x02
-
-#define VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER  0x03
-#define VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE      0x00
-#define VGA_GRAPHICS_CONTROLLER_FUNCTION_AND          0x08
-#define VGA_GRAPHICS_CONTROLLER_FUNCTION_OR           0x10
-#define VGA_GRAPHICS_CONTROLLER_FUNCTION_XOR          0x18
-
-#define VGA_GRAPHICS_CONTROLLER_READ_MAP_SELECT_REGISTER  0x04
-
-#define VGA_GRAPHICS_CONTROLLER_MODE_REGISTER  0x05
-#define VGA_GRAPHICS_CONTROLLER_READ_MODE_0    0x00
-#define VGA_GRAPHICS_CONTROLLER_READ_MODE_1    0x08
-#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_0   0x00
-#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_1   0x01
-#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2   0x02
-#define VGA_GRAPHICS_CONTROLLER_WRITE_MODE_3   0x03
-
-#define VGA_GRAPHICS_CONTROLLER_MISCELLANEOUS_REGISTER  0x06
-
-#define VGA_GRAPHICS_CONTROLLER_COLOR_DONT_CARE_REGISTER  0x07
-
-#define VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER  0x08
-
-/**
-  Install child handles if the Handle supports MBR format.
-
-  @param  This                   Calling context.
-  @param  ParentHandle           Parent Handle
-  @param  ParentPciIo            Parent PciIo interface
-  @param  ParentLegacyBios       Parent LegacyBios interface
-  @param  ParentDevicePath       Parent Device Path
-  @param  RemainingDevicePath    Remaining Device Path
-
-  @retval EFI_SUCCESS            If a child handle was added
-  @retval other                  A child handle was not added
-
-**/
-EFI_STATUS
-BiosVideoChildHandleInstall (
-  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN  EFI_HANDLE                   ParentHandle,
-  IN  EFI_PCI_IO_PROTOCOL          *ParentPciIo,
-  IN  EFI_LEGACY_BIOS_PROTOCOL     *ParentLegacyBios,
-  IN  EFI_DEVICE_PATH_PROTOCOL     *ParentDevicePath,
-  IN  EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  );
-
-/**
-  Deregister an video child handle and free resources.
-
-  @param  This                   Protocol instance pointer.
-  @param  Controller             Video controller handle
-  @param  Handle                 Video child handle
-
-  @return EFI_STATUS
-
-**/
-EFI_STATUS
-BiosVideoChildHandleUninstall (
-  EFI_DRIVER_BINDING_PROTOCOL  *This,
-  EFI_HANDLE                   Controller,
-  EFI_HANDLE                   Handle
-  );
-
-/**
-  Release resource for BIOS video instance.
-
-  @param  BiosVideoPrivate       Video child device private data structure
-
-**/
-VOID
-BiosVideoDeviceReleaseResource (
-  BIOS_VIDEO_DEV  *BiosVideoPrivate
-  );
-
-/**
-  Check if all video child handles have been uninstalled.
-
-  @param  Controller             Video controller handle
-
-  @return TRUE                   Child handles exist.
-  @return FALSE                  All video child handles have been uninstalled.
-
-**/
-BOOLEAN
-HasChildHandle (
-  IN EFI_HANDLE  Controller
-  );
-
-#endif
diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h b/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h
deleted file mode 100644
index 0c8e62c0641e..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h
+++ /dev/null
@@ -1,459 +0,0 @@
-/** @file
-
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
-
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _VESA_BIOS_EXTENSIONS_H_
-#define _VESA_BIOS_EXTENSIONS_H_
-
-//
-// Turn on byte packing of data structures
-//
-#pragma pack(1)
-//
-// VESA BIOS Extensions status codes
-//
-#define VESA_BIOS_EXTENSIONS_STATUS_SUCCESS  0x004f
-
-//
-// VESA BIOS Extensions Services
-//
-#define VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION  0x4f00
-
-/*++
-
-  Routine Description:
-    Function 00 : Return Controller Information
-
-  Arguments:
-    Inputs:
-      AX    = 0x4f00
-      ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK structure
-    Outputs:
-      AX    = Return Status
-
---*/
-#define VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION  0x4f01
-
-/*++
-
-  Routine Description:
-    Function 01 : Return Mode Information
-
-  Arguments:
-    Inputs:
-      AX    = 0x4f01
-      CX    = Mode Number
-      ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK structure
-    Outputs:
-      AX    = Return Status
-
---*/
-#define VESA_BIOS_EXTENSIONS_SET_MODE  0x4f02
-
-/*++
-
-  Routine Description:
-    Function 02 : Set Mode
-
-  Arguments:
-    Inputs:
-      AX    = 0x4f02
-      BX    = Desired mode to set
-        D0-D8   = Mode Number
-        D9-D10  = Reserved (must be 0)
-        D11     = 0 - Use current default refresh rate
-                = 1 - Use user specfieid CRTC values for refresh rate
-        D12-D13 = Reserved (must be 0)
-        D14     = 0 - Use windowed frame buffer model
-                = 1 - Use linear/flat frame buffer model
-        D15     = 0 - Clear display memory
-                = 1 - Don't clear display memory
-      ES:DI = Pointer to buffer to the VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK structure
-    Outputs:
-      AX    = Return Status
-
---*/
-#define VESA_BIOS_EXTENSIONS_RETURN_CURRENT_MODE  0x4f03
-
-/*++
-
-  Routine Description:
-    Function 03 : Return Current Mode
-
-  Arguments:
-    Inputs:
-      AX    = 0x4f03
-    Outputs:
-      AX    = Return Status
-      BX    = Current mode
-        D0-D13  = Mode Number
-        D14     = 0 - Windowed frame buffer model
-                = 1 - Linear/flat frame buffer model
-        D15     = 0 - Memory cleared at last mode set
-                = 1 - Memory not cleared at last mode set
-
---*/
-#define VESA_BIOS_EXTENSIONS_SAVE_RESTORE_STATE  0x4f04
-
-/*++
-
-  Routine Description:
-    Function 04 : Save/Restore State
-
-  Arguments:
-    Inputs:
-      AX    = 0x4f03
-      DL    = 0x00 - Return Save/Restore State buffer size
-            = 0x01 - Save State
-            = 0x02 - Restore State
-      CX    = Requested Status
-        D0  = Save/Restore controller hardware state
-        D1  = Save/Restore BIOS data state
-        D2  = Save/Restore DAC state
-        D3  = Save/Restore Regsiter state
-      ES:BX = Pointer to buffer if DL=1 or DL=2
-    Outputs:
-      AX    = Return Status
-      BX    = Number of 64 byte blocks to hold the state buffer if DL=0
-
---*/
-#define VESA_BIOS_EXTENSIONS_EDID  0x4f15
-
-/*++
-
-  Routine Description:
-    Function 15 : implement VBE/DDC service
-
-  Arguments:
-    Inputs:
-      AX    = 0x4f15
-      BL    = 0x00 - Report VBE/DDC Capabilities
-      CX    = 0x00 - Controller unit number (00 = primary controller)
-      ES:DI = Null pointer, must be 0:0 in version 1.0
-    Outputs:
-      AX    = Return Status
-      BH    = Approx. time in seconds, rounded up, to transfer one EDID block(128 bytes)
-      BL    = DDC level supported
-        D0  = 0 DDC1 not supported
-            = 1 DDC1 supported
-        D1  = 0 DDC2 not supported
-            = 1 DDC2 supported
-        D2  = 0 Screen not blanked during data transfer
-            = 1 Screen blanked during data transfer
-
-    Inputs:
-      AX    = 0x4f15
-      BL    = 0x01 - Read EDID
-      CX    = 0x00 - Controller unit number (00 = primary controller)
-      DX    = 0x00 - EDID block number
-      ES:DI = Pointer to buffer in which the EDID block is returned
-    Outputs:
-      AX    = Return Status
---*/
-
-//
-// Timing data from EDID data block
-//
-#define VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE                     128
-#define VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER  17
-
-//
-// Established Timings: 24 possible resolutions
-// Standard Timings: 8 possible resolutions
-// Detailed Timings: 4 possible resolutions
-//
-#define VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER  36
-
-//
-// Timing data size for Established Timings, Standard Timings and Detailed Timings
-//
-#define VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE               3
-#define VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE                  16
-#define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE  18
-#define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE   72
-
-typedef struct {
-  UINT16    HorizontalResolution;
-  UINT16    VerticalResolution;
-  UINT16    RefreshRate;
-} VESA_BIOS_EXTENSIONS_EDID_TIMING;
-
-typedef struct {
-  UINT32    ValidNumber;
-  UINT32    Key[VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER];
-} VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING;
-
-typedef struct {
-  UINT8     Header[8];                      // EDID header "00 FF FF FF FF FF FF 00"
-  UINT16    ManufactureName;                // EISA 3-character ID
-  UINT16    ProductCode;                    // Vendor assigned code
-  UINT32    SerialNumber;                   // 32-bit serial number
-  UINT8     WeekOfManufacture;              // Week number
-  UINT8     YearOfManufacture;              // Year
-  UINT8     EdidVersion;                    // EDID Structure Version
-  UINT8     EdidRevision;                   // EDID Structure Revision
-  UINT8     VideoInputDefinition;
-  UINT8     MaxHorizontalImageSize;         // cm
-  UINT8     MaxVerticalImageSize;           // cm
-  UINT8     DisplayTransferCharacteristic;
-  UINT8     FeatureSupport;
-  UINT8     RedGreenLowBits;                // Rx1 Rx0 Ry1 Ry0 Gx1 Gx0 Gy1Gy0
-  UINT8     BlueWhiteLowBits;               // Bx1 Bx0 By1 By0 Wx1 Wx0 Wy1 Wy0
-  UINT8     RedX;                           // Red-x Bits 9 - 2
-  UINT8     RedY;                           // Red-y Bits 9 - 2
-  UINT8     GreenX;                         // Green-x Bits 9 - 2
-  UINT8     GreenY;                         // Green-y Bits 9 - 2
-  UINT8     BlueX;                          // Blue-x Bits 9 - 2
-  UINT8     BlueY;                          // Blue-y Bits 9 - 2
-  UINT8     WhiteX;                         // White-x Bits 9 - 2
-  UINT8     WhiteY;                         // White-x Bits 9 - 2
-  UINT8     EstablishedTimings[VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE];
-  UINT8     StandardTimingIdentification[VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE];
-  UINT8     DetailedTimingDescriptions[VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE];
-  UINT8     ExtensionFlag;                  // Number of (optional) 128-byte EDID extension blocks to follow
-  UINT8     Checksum;
-} VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK;
-
-//
-// Super VGA Information Block
-//
-typedef struct {
-  UINT32    VESASignature;     // 'VESA' 4 byte signature
-  UINT16    VESAVersion;       // VBE version number
-  UINT32    OEMStringPtr;      // Pointer to OEM string
-  UINT32    Capabilities;      // Capabilities of video card
-  UINT32    VideoModePtr;      // Pointer to an array of 16-bit supported modes values terminated by 0xFFFF
-  UINT16    TotalMemory;       // Number of 64kb memory blocks
-  UINT16    OemSoftwareRev;    // VBE implementation Software revision
-  UINT32    OemVendorNamePtr;  // VbeFarPtr to Vendor Name String
-  UINT32    OemProductNamePtr; // VbeFarPtr to Product Name String
-  UINT32    OemProductRevPtr;  // VbeFarPtr to Product Revision String
-  UINT8     Reserved[222];     // Reserved for VBE implementation scratch area
-  UINT8     OemData[256];      // Data area for OEM strings.  Pad to 512 byte block size
-} VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK;
-
-//
-// Super VGA Information Block VESASignature values
-//
-#define VESA_BIOS_EXTENSIONS_VESA_SIGNATURE  SIGNATURE_32 ('V', 'E', 'S', 'A')
-#define VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE  SIGNATURE_32 ('V', 'B', 'E', '2')
-
-//
-// Super VGA Information Block VESAVersion values
-//
-#define VESA_BIOS_EXTENSIONS_VERSION_1_2  0x0102
-#define VESA_BIOS_EXTENSIONS_VERSION_2_0  0x0200
-#define VESA_BIOS_EXTENSIONS_VERSION_3_0  0x0300
-
-//
-// Super VGA Information Block Capabilities field bit definitions
-//
-#define VESA_BIOS_EXTENSIONS_CAPABILITY_8_BIT_DAC  0x01 // 0: DAC width is fixed at 6 bits/color
-// 1: DAC width switchable to 8 bits/color
-//
-#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_VGA  0x02 // 0: Controller is VGA compatible
-// 1: Controller is not VGA compatible
-//
-#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_NORMAL_RAMDAC  0x04 // 0: Normal RAMDAC operation
-// 1: Use blank bit in function 9 to program RAMDAC
-//
-#define VESA_BIOS_EXTENSIONS_CAPABILITY_STEREOSCOPIC  0x08  // 0: No hardware stereoscopic signal support
-// 1: Hardware stereoscopic signal support
-//
-#define VESA_BIOS_EXTENSIONS_CAPABILITY_VESA_EVC  0x10  // 0: Stero signaling supported via external VESA stereo connector
-// 1: Stero signaling supported via VESA EVC connector
-//
-// Super VGA mode number bite field definitions
-//
-#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA  0x0100 // 0: Not a VESA defined VBE mode
-// 1: A VESA defined VBE mode
-//
-#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_REFRESH_CONTROL_USER  0x0800 // 0: Use current BIOS default referesh rate
-// 1: Use the user specified CRTC values for refresh rate
-//
-#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER  0x4000  // 0: Use a banked/windowed frame buffer
-// 1: Use a linear/flat frame buffer
-//
-#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_PRESERVE_MEMORY  0x8000  // 0: Clear display memory
-// 1: Preseve display memory
-//
-// Super VGA Information Block mode list terminator value
-//
-#define VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST  0xffff
-
-//
-// Window Function
-//
-typedef
-VOID
-(*VESA_BIOS_EXTENSIONS_WINDOW_FUNCTION) (
-  VOID
-  );
-
-//
-// Super VGA Mode Information Block
-//
-typedef struct {
-  //
-  // Manadory fields for all VESA Bios Extensions revisions
-  //
-  UINT16    ModeAttributes;                               // Mode attributes
-  UINT8     WinAAttributes;                               // Window A attributes
-  UINT8     WinBAttributes;                               // Window B attributes
-  UINT16    WinGranularity;                               // Window granularity in k
-  UINT16    WinSize;                                      // Window size in k
-  UINT16    WinASegment;                                  // Window A segment
-  UINT16    WinBSegment;                                  // Window B segment
-  UINT32    WindowFunction;                               // Pointer to window function
-  UINT16    BytesPerScanLine;                             // Bytes per scanline
-  //
-  // Manadory fields for VESA Bios Extensions 1.2 and above
-  //
-  UINT16    XResolution;                                      // Horizontal resolution
-  UINT16    YResolution;                                      // Vertical resolution
-  UINT8     XCharSize;                                        // Character cell width
-  UINT8     YCharSize;                                        // Character cell height
-  UINT8     NumberOfPlanes;                                   // Number of memory planes
-  UINT8     BitsPerPixel;                                     // Bits per pixel
-  UINT8     NumberOfBanks;                                    // Number of CGA style banks
-  UINT8     MemoryModel;                                      // Memory model type
-  UINT8     BankSize;                                         // Size of CGA style banks
-  UINT8     NumberOfImagePages;                               // Number of images pages
-  UINT8     Reserved1;                                        // Reserved
-  UINT8     RedMaskSize;                                      // Size of direct color red mask
-  UINT8     RedFieldPosition;                                 // Bit posn of lsb of red mask
-  UINT8     GreenMaskSize;                                    // Size of direct color green mask
-  UINT8     GreenFieldPosition;                               // Bit posn of lsb of green mask
-  UINT8     BlueMaskSize;                                     // Size of direct color blue mask
-  UINT8     BlueFieldPosition;                                // Bit posn of lsb of blue mask
-  UINT8     RsvdMaskSize;                                     // Size of direct color res mask
-  UINT8     RsvdFieldPosition;                                // Bit posn of lsb of res mask
-  UINT8     DirectColorModeInfo;                              // Direct color mode attributes
-  //
-  // Manadory fields for VESA Bios Extensions 2.0 and above
-  //
-  UINT32    PhysBasePtr;                              // Physical Address for flat memory frame buffer
-  UINT32    Reserved2;                                // Reserved
-  UINT16    Reserved3;                                // Reserved
-  //
-  // Manadory fields for VESA Bios Extensions 3.0 and above
-  //
-  UINT16    LinBytesPerScanLine;                                // Bytes/scan line for linear modes
-  UINT8     BnkNumberOfImagePages;                              // Number of images for banked modes
-  UINT8     LinNumberOfImagePages;                              // Number of images for linear modes
-  UINT8     LinRedMaskSize;                                     // Size of direct color red mask (linear mode)
-  UINT8     LinRedFieldPosition;                                // Bit posiiton of lsb of red mask (linear modes)
-  UINT8     LinGreenMaskSize;                                   // Size of direct color green mask (linear mode)
-  UINT8     LinGreenFieldPosition;                              // Bit posiiton of lsb of green mask (linear modes)
-  UINT8     LinBlueMaskSize;                                    // Size of direct color blue mask (linear mode)
-  UINT8     LinBlueFieldPosition;                               // Bit posiiton of lsb of blue mask (linear modes)
-  UINT8     LinRsvdMaskSize;                                    // Size of direct color reserved mask (linear mode)
-  UINT8     LinRsvdFieldPosition;                               // Bit posiiton of lsb of reserved mask (linear modes)
-  UINT32    MaxPixelClock;                                      // Maximum pixel clock (in Hz) for graphics mode
-  UINT8     Pad[190];                                           // Pad to 256 byte block size
-} VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK;
-
-//
-// Super VGA Mode Information Block ModeAttributes field bit definitions
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_HARDWARE  0x0001  // 0: Mode not supported in handware
-// 1: Mode supported in handware
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_TTY  0x0004 // 0: TTY Output functions not supported by BIOS
-// 1: TTY Output functions supported by BIOS
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR  0x0008 // 0: Monochrome mode
-// 1: Color mode
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS  0x0010  // 0: Text mode
-// 1: Graphics mode
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_VGA  0x0020 // 0: VGA compatible mode
-// 1: Not a VGA compatible mode
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_WINDOWED  0x0040  // 0: VGA compatible windowed memory mode
-// 1: Not a VGA compatible windowed memory mode
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER  0x0080 // 0: No linear fram buffer mode available
-// 1: Linear frame buffer mode available
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DOUBLE_SCAN  0x0100 // 0: No double scan mode available
-// 1: Double scan mode available
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_INTERLACED  0x0200  // 0: No interlaced mode is available
-// 1: Interlaced mode is available
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NO_TRIPPLE_BUFFER  0x0400 // 0: No hardware triple buffer mode support available
-// 1: Hardware triple buffer mode support available
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_STEREOSCOPIC  0x0800  // 0: No hardware steroscopic display support
-// 1: Hardware steroscopic display support
-//
-#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DUAL_DISPLAY  0x1000  // 0: No dual display start address support
-// 1: Dual display start address support
-//
-// Super VGA Mode Information Block WinAAttribite/WinBAttributes field bit definitions
-//
-#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_RELOCATABLE  0x01 // 0: Single non-relocatable window only
-// 1: Relocatable window(s) are supported
-//
-#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_READABLE  0x02  // 0: Window is not readable
-// 1: Window is readable
-//
-#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_WRITABLE  0x04  // 0: Window is not writable
-// 1: Window is writable
-//
-// Super VGA Mode Information Block DirectColorMode field bit definitions
-//
-#define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_PROG_COLOR_RAMP  0x01  // 0: Color ram is fixed
-// 1: Color ramp is programmable
-//
-#define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_RSVD_USABLE  0x02  // 0: Bits in Rsvd field are reserved
-// 1: Bits in Rsdv field are usable
-//
-// Super VGA Memory Models
-//
-typedef enum {
-  MemPL  = 3, // Planar memory model
-  MemPK  = 4, // Packed pixel memory model
-  MemRGB = 6, // Direct color RGB memory model
-  MemYUV = 7  // Direct color YUV memory model
-} VESA_BIOS_EXTENSIONS_MEMORY_MODELS;
-
-//
-// Super VGA CRTC Information Block
-//
-typedef struct {
-  UINT16    HorizontalTotal;     // Horizontal total in pixels
-  UINT16    HorizontalSyncStart; // Horizontal sync start in pixels
-  UINT16    HorizontalSyncEnd;   // Horizontal sync end in pixels
-  UINT16    VericalTotal;        // Vertical total in pixels
-  UINT16    VericalSyncStart;    // Vertical sync start in pixels
-  UINT16    VericalSyncEnd;      // Vertical sync end in pixels
-  UINT8     Flags;               // Flags (Interlaced/DoubleScan/etc).
-  UINT32    PixelClock;          // Pixel clock in units of Hz
-  UINT16    RefreshRate;         // Refresh rate in units of 0.01 Hz
-  UINT8     Reserved[40];        // Pad
-} VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK;
-
-#define VESA_BIOS_EXTENSIONS_CRTC_FLAGS_DOUBLE_SCAN  0x01 // 0: Graphics mode is not souble scanned
-// 1: Graphics mode is double scanned
-//
-#define VESA_BIOS_EXTENSIONS_CRTC_FLAGSINTERLACED  0x02 // 0: Graphics mode is not interlaced
-// 1: Graphics mode is interlaced
-//
-#define VESA_BIOS_EXTENSIONS_CRTC_HORIZONTAL_SYNC_NEGATIVE  0x04  // 0: Horizontal sync polarity is positive(+)
-// 0: Horizontal sync polarity is negative(-)
-//
-#define VESA_BIOS_EXTENSIONS_CRTC_VERITICAL_SYNC_NEGATIVE  0x08 // 0: Verical sync polarity is positive(+)
-// 0: Verical sync polarity is negative(-)
-//
-// Turn off byte packing of data structures
-//
-#pragma pack()
-
-#endif
diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c b/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c
deleted file mode 100644
index 35a4a24f3404..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/BiosVideo.c
+++ /dev/null
@@ -1,3357 +0,0 @@
-/** @file
-  ConsoleOut Routines that speak VGA.
-
-Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
-
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "BiosVideo.h"
-
-//
-// EFI Driver Binding Protocol Instance
-//
-EFI_DRIVER_BINDING_PROTOCOL  gBiosVideoDriverBinding = {
-  BiosVideoDriverBindingSupported,
-  BiosVideoDriverBindingStart,
-  BiosVideoDriverBindingStop,
-  0x3,
-  NULL,
-  NULL
-};
-
-//
-// Global lookup tables for VGA graphics modes
-//
-UINT8  mVgaLeftMaskTable[] = { 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
-
-UINT8  mVgaRightMaskTable[] = { 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff };
-
-UINT8  mVgaBitMaskTable[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
-
-//
-// Save controller attributes during first start
-//
-UINT64   mOriginalPciAttributes;
-BOOLEAN  mPciAttributesSaved = FALSE;
-
-EFI_GRAPHICS_OUTPUT_BLT_PIXEL  mVgaColorToGraphicsOutputColor[] = {
-  { 0x00, 0x00, 0x00, 0x00 },
-  { 0x98, 0x00, 0x00, 0x00 },
-  { 0x00, 0x98, 0x00, 0x00 },
-  { 0x98, 0x98, 0x00, 0x00 },
-  { 0x00, 0x00, 0x98, 0x00 },
-  { 0x98, 0x00, 0x98, 0x00 },
-  { 0x00, 0x98, 0x98, 0x00 },
-  { 0x98, 0x98, 0x98, 0x00 },
-  { 0x10, 0x10, 0x10, 0x00 },
-  { 0xff, 0x10, 0x10, 0x00 },
-  { 0x10, 0xff, 0x10, 0x00 },
-  { 0xff, 0xff, 0x10, 0x00 },
-  { 0x10, 0x10, 0xff, 0x00 },
-  { 0xf0, 0x10, 0xff, 0x00 },
-  { 0x10, 0xff, 0xff, 0x00 },
-  { 0xff, 0xff, 0xff, 0x00 }
-};
-
-//
-// Standard timing defined by VESA EDID
-//
-VESA_BIOS_EXTENSIONS_EDID_TIMING  mEstablishedEdidTiming[] = {
-  //
-  // Established Timing I
-  //
-  { 800,  600,  60 },
-  { 800,  600,  56 },
-  { 640,  480,  75 },
-  { 640,  480,  72 },
-  { 640,  480,  67 },
-  { 640,  480,  60 },
-  { 720,  400,  88 },
-  { 720,  400,  70 },
-  //
-  // Established Timing II
-  //
-  { 1280, 1024, 75 },
-  { 1024, 768,  75 },
-  { 1024, 768,  70 },
-  { 1024, 768,  60 },
-  { 1024, 768,  87 },
-  { 832,  624,  75 },
-  { 800,  600,  75 },
-  { 800,  600,  72 },
-  //
-  // Established Timing III
-  //
-  { 1152, 870,  75 }
-};
-
-/**
-  Supported.
-
-  @param  This                   Pointer to driver binding protocol
-  @param  Controller             Controller handle to connect
-  @param  RemainingDevicePath    A pointer to the remaining portion of a device
-                                 path
-
-  @retval EFI_STATUS             EFI_SUCCESS:This controller can be managed by this
-                                 driver, Otherwise, this controller cannot be
-                                 managed by this driver
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoDriverBindingSupported (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  )
-{
-  EFI_STATUS                Status;
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;
-  EFI_PCI_IO_PROTOCOL       *PciIo;
-  PCI_TYPE00                Pci;
-  EFI_DEV_PATH              *Node;
-
-  //
-  // See if the Legacy BIOS Protocol is available
-  //
-  Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Open the IO Abstraction(s) needed to perform the supported test
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **)&PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {
-    return Status;
-  }
-
-  if (Status == EFI_ALREADY_STARTED) {
-    //
-    // If VgaMiniPort protocol is installed, EFI_ALREADY_STARTED indicates failure,
-    // because VgaMiniPort protocol is installed on controller handle directly.
-    //
-    Status = gBS->OpenProtocol (
-                    Controller,
-                    &gEfiVgaMiniPortProtocolGuid,
-                    NULL,
-                    NULL,
-                    NULL,
-                    EFI_OPEN_PROTOCOL_TEST_PROTOCOL
-                    );
-    if (!EFI_ERROR (Status)) {
-      return EFI_ALREADY_STARTED;
-    }
-  }
-
-  //
-  // See if this is a PCI Graphics Controller by looking at the Command register and
-  // Class Code Register
-  //
-  Status = PciIo->Pci.Read (
-                        PciIo,
-                        EfiPciIoWidthUint32,
-                        0,
-                        sizeof (Pci) / sizeof (UINT32),
-                        &Pci
-                        );
-  if (EFI_ERROR (Status)) {
-    Status = EFI_UNSUPPORTED;
-    goto Done;
-  }
-
-  Status = EFI_UNSUPPORTED;
-  if ((Pci.Hdr.ClassCode[2] == 0x03) || ((Pci.Hdr.ClassCode[2] == 0x00) && (Pci.Hdr.ClassCode[1] == 0x01))) {
-    Status = EFI_SUCCESS;
-    //
-    // If this is a graphics controller,
-    // go further check RemainingDevicePath validation
-    //
-    if (RemainingDevicePath != NULL) {
-      Node = (EFI_DEV_PATH *)RemainingDevicePath;
-      //
-      // Check if RemainingDevicePath is the End of Device Path Node,
-      // if yes, return EFI_SUCCESS
-      //
-      if (!IsDevicePathEnd (Node)) {
-        //
-        // If RemainingDevicePath isn't the End of Device Path Node,
-        // check its validation
-        //
-        if ((Node->DevPath.Type != ACPI_DEVICE_PATH) ||
-            (Node->DevPath.SubType != ACPI_ADR_DP) ||
-            (DevicePathNodeLength (&Node->DevPath) < sizeof (ACPI_ADR_DEVICE_PATH)))
-        {
-          Status = EFI_UNSUPPORTED;
-        }
-      }
-    }
-  }
-
-Done:
-  gBS->CloseProtocol (
-         Controller,
-         &gEfiPciIoProtocolGuid,
-         This->DriverBindingHandle,
-         Controller
-         );
-
-  return Status;
-}
-
-/**
-  Install Graphics Output Protocol onto VGA device handles.
-
-  @param  This                   Pointer to driver binding protocol
-  @param  Controller             Controller handle to connect
-  @param  RemainingDevicePath    A pointer to the remaining portion of a device
-                                 path
-
-  @return EFI_STATUS
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoDriverBindingStart (
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN EFI_HANDLE                   Controller,
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  )
-{
-  EFI_STATUS                Status;
-  EFI_DEVICE_PATH_PROTOCOL  *ParentDevicePath;
-  EFI_PCI_IO_PROTOCOL       *PciIo;
-  EFI_LEGACY_BIOS_PROTOCOL  *LegacyBios;
-  UINTN                     Flags;
-  UINT64                    Supports;
-
-  //
-  // Initialize local variables
-  //
-  PciIo            = NULL;
-  ParentDevicePath = NULL;
-
-  //
-  //
-  // See if the Legacy BIOS Protocol is available
-  //
-  Status = gBS->LocateProtocol (&gEfiLegacyBiosProtocolGuid, NULL, (VOID **)&LegacyBios);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Prepare for status code
-  //
-  Status = gBS->HandleProtocol (
-                  Controller,
-                  &gEfiDevicePathProtocolGuid,
-                  (VOID **)&ParentDevicePath
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Open the IO Abstraction(s) needed
-  //
-  Status = gBS->OpenProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  (VOID **)&PciIo,
-                  This->DriverBindingHandle,
-                  Controller,
-                  EFI_OPEN_PROTOCOL_BY_DRIVER
-                  );
-  if (EFI_ERROR (Status) && (Status != EFI_ALREADY_STARTED)) {
-    return Status;
-  }
-
-  //
-  // Save original PCI attributes
-  //
-  if (!mPciAttributesSaved) {
-    Status = PciIo->Attributes (
-                      PciIo,
-                      EfiPciIoAttributeOperationGet,
-                      0,
-                      &mOriginalPciAttributes
-                      );
-
-    if (EFI_ERROR (Status)) {
-      goto Done;
-    }
-
-    mPciAttributesSaved = TRUE;
-  }
-
-  //
-  // Get supported PCI attributes
-  //
-  Status = PciIo->Attributes (
-                    PciIo,
-                    EfiPciIoAttributeOperationSupported,
-                    0,
-                    &Supports
-                    );
-  if (EFI_ERROR (Status)) {
-    goto Done;
-  }
-
-  Supports &= (UINT64)(EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16);
-  if ((Supports == 0) || (Supports == (EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_VGA_IO_16))) {
-    Status = EFI_UNSUPPORTED;
-    goto Done;
-  }
-
-  REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-    EFI_PROGRESS_CODE,
-    EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_ENABLE,
-    ParentDevicePath
-    );
-  //
-  // Enable the device and make sure VGA cycles are being forwarded to this VGA device
-  //
-  Status = PciIo->Attributes (
-                    PciIo,
-                    EfiPciIoAttributeOperationEnable,
-                    EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | Supports,
-                    NULL
-                    );
-  if (EFI_ERROR (Status)) {
-    REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,
-      EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_RESOURCE_CONFLICT,
-      ParentDevicePath
-      );
-    goto Done;
-  }
-
-  //
-  // Check to see if there is a legacy option ROM image associated with this PCI device
-  //
-  Status = LegacyBios->CheckPciRom (
-                         LegacyBios,
-                         Controller,
-                         NULL,
-                         NULL,
-                         &Flags
-                         );
-  if (EFI_ERROR (Status)) {
-    goto Done;
-  }
-
-  //
-  // Post the legacy option ROM if it is available.
-  //
-  REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-    EFI_PROGRESS_CODE,
-    EFI_P_PC_RESET,
-    ParentDevicePath
-    );
-  Status = LegacyBios->InstallPciRom (
-                         LegacyBios,
-                         Controller,
-                         NULL,
-                         &Flags,
-                         NULL,
-                         NULL,
-                         NULL,
-                         NULL
-                         );
-  if (EFI_ERROR (Status)) {
-    REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,
-      EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_CONTROLLER_ERROR,
-      ParentDevicePath
-      );
-    goto Done;
-  }
-
-  if (RemainingDevicePath != NULL) {
-    if (IsDevicePathEnd (RemainingDevicePath) &&
-        (FeaturePcdGet (PcdBiosVideoCheckVbeEnable) || FeaturePcdGet (PcdBiosVideoCheckVgaEnable)))
-    {
-      //
-      // If RemainingDevicePath is the End of Device Path Node,
-      // don't create any child device and return EFI_SUCCESS
-      Status = EFI_SUCCESS;
-      goto Done;
-    }
-  }
-
-  //
-  // Create child handle and install GraphicsOutputProtocol on it
-  //
-  Status = BiosVideoChildHandleInstall (
-             This,
-             Controller,
-             PciIo,
-             LegacyBios,
-             ParentDevicePath,
-             RemainingDevicePath
-             );
-
-Done:
-  if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {
-    REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-      EFI_PROGRESS_CODE,
-      EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_PC_DISABLE,
-      ParentDevicePath
-      );
-
-    REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-      EFI_PROGRESS_CODE,
-      EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_NOT_DETECTED,
-      ParentDevicePath
-      );
-    if (!HasChildHandle (Controller)) {
-      if (mPciAttributesSaved) {
-        //
-        // Restore original PCI attributes
-        //
-        PciIo->Attributes (
-                 PciIo,
-                 EfiPciIoAttributeOperationSet,
-                 mOriginalPciAttributes,
-                 NULL
-                 );
-      }
-    }
-
-    //
-    // Release PCI I/O Protocols on the controller handle.
-    //
-    gBS->CloseProtocol (
-           Controller,
-           &gEfiPciIoProtocolGuid,
-           This->DriverBindingHandle,
-           Controller
-           );
-  }
-
-  return Status;
-}
-
-/**
-  Stop.
-
-  @param  This                   Pointer to driver binding protocol
-  @param  Controller             Controller handle to connect
-  @param  NumberOfChildren       Number of children handle created by this driver
-  @param  ChildHandleBuffer      Buffer containing child handle created
-
-  @retval EFI_SUCCESS            Driver disconnected successfully from controller
-  @retval EFI_UNSUPPORTED        Cannot find BIOS_VIDEO_DEV structure
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoDriverBindingStop (
-  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN  EFI_HANDLE                   Controller,
-  IN  UINTN                        NumberOfChildren,
-  IN  EFI_HANDLE                   *ChildHandleBuffer
-  )
-{
-  EFI_STATUS           Status;
-  BOOLEAN              AllChildrenStopped;
-  UINTN                Index;
-  EFI_PCI_IO_PROTOCOL  *PciIo;
-
-  AllChildrenStopped = TRUE;
-
-  if (NumberOfChildren == 0) {
-    //
-    // Close PCI I/O protocol on the controller handle
-    //
-    gBS->CloseProtocol (
-           Controller,
-           &gEfiPciIoProtocolGuid,
-           This->DriverBindingHandle,
-           Controller
-           );
-
-    return EFI_SUCCESS;
-  }
-
-  for (Index = 0; Index < NumberOfChildren; Index++) {
-    Status = BiosVideoChildHandleUninstall (This, Controller, ChildHandleBuffer[Index]);
-
-    if (EFI_ERROR (Status)) {
-      AllChildrenStopped = FALSE;
-    }
-  }
-
-  if (!AllChildrenStopped) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  if (!HasChildHandle (Controller)) {
-    if (mPciAttributesSaved) {
-      Status = gBS->HandleProtocol (
-                      Controller,
-                      &gEfiPciIoProtocolGuid,
-                      (VOID **)&PciIo
-                      );
-      ASSERT_EFI_ERROR (Status);
-
-      //
-      // Restore original PCI attributes
-      //
-      Status = PciIo->Attributes (
-                        PciIo,
-                        EfiPciIoAttributeOperationSet,
-                        mOriginalPciAttributes,
-                        NULL
-                        );
-      ASSERT_EFI_ERROR (Status);
-    }
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Install child handles if the Handle supports MBR format.
-
-  @param  This                   Calling context.
-  @param  ParentHandle           Parent Handle
-  @param  ParentPciIo            Parent PciIo interface
-  @param  ParentLegacyBios       Parent LegacyBios interface
-  @param  ParentDevicePath       Parent Device Path
-  @param  RemainingDevicePath    Remaining Device Path
-
-  @retval EFI_SUCCESS            If a child handle was added
-  @retval other                  A child handle was not added
-
-**/
-EFI_STATUS
-BiosVideoChildHandleInstall (
-  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
-  IN  EFI_HANDLE                   ParentHandle,
-  IN  EFI_PCI_IO_PROTOCOL          *ParentPciIo,
-  IN  EFI_LEGACY_BIOS_PROTOCOL     *ParentLegacyBios,
-  IN  EFI_DEVICE_PATH_PROTOCOL     *ParentDevicePath,
-  IN  EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
-  )
-{
-  EFI_STATUS            Status;
-  BIOS_VIDEO_DEV        *BiosVideoPrivate;
-  PCI_TYPE00            Pci;
-  ACPI_ADR_DEVICE_PATH  AcpiDeviceNode;
-  BOOLEAN               ProtocolInstalled;
-
-  //
-  // Allocate the private device structure for video device
-  //
-  BiosVideoPrivate = (BIOS_VIDEO_DEV *)AllocateZeroPool (
-                                         sizeof (BIOS_VIDEO_DEV)
-                                         );
-  if (NULL == BiosVideoPrivate) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  //
-  // See if this is a VGA compatible controller or not
-  //
-  Status = ParentPciIo->Pci.Read (
-                              ParentPciIo,
-                              EfiPciIoWidthUint32,
-                              0,
-                              sizeof (Pci) / sizeof (UINT32),
-                              &Pci
-                              );
-  if (EFI_ERROR (Status)) {
-    REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,
-      EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_CONTROLLER_ERROR,
-      ParentDevicePath
-      );
-    goto Done;
-  }
-
-  BiosVideoPrivate->VgaCompatible = FALSE;
-  if ((Pci.Hdr.ClassCode[2] == 0x00) && (Pci.Hdr.ClassCode[1] == 0x01)) {
-    BiosVideoPrivate->VgaCompatible = TRUE;
-  }
-
-  if ((Pci.Hdr.ClassCode[2] == 0x03) && (Pci.Hdr.ClassCode[1] == 0x00) && (Pci.Hdr.ClassCode[0] == 0x00)) {
-    BiosVideoPrivate->VgaCompatible = TRUE;
-  }
-
-  if (PcdGetBool (PcdBiosVideoSetTextVgaModeEnable)) {
-    //
-    // Create EXIT_BOOT_SERIVES Event
-    //
-    Status = gBS->CreateEventEx (
-                    EVT_NOTIFY_SIGNAL,
-                    TPL_NOTIFY,
-                    BiosVideoNotifyExitBootServices,
-                    BiosVideoPrivate,
-                    &gEfiEventExitBootServicesGuid,
-                    &BiosVideoPrivate->ExitBootServicesEvent
-                    );
-    if (EFI_ERROR (Status)) {
-      goto Done;
-    }
-  }
-
-  //
-  // Initialize the child private structure
-  //
-  BiosVideoPrivate->Signature = BIOS_VIDEO_DEV_SIGNATURE;
-
-  //
-  // Fill in Graphics Output specific mode structures
-  //
-  BiosVideoPrivate->HardwareNeedsStarting = TRUE;
-  BiosVideoPrivate->ModeData              = NULL;
-  BiosVideoPrivate->LineBuffer            = NULL;
-  BiosVideoPrivate->VgaFrameBuffer        = NULL;
-  BiosVideoPrivate->VbeFrameBuffer        = NULL;
-
-  //
-  // Fill in the Graphics Output Protocol
-  //
-  BiosVideoPrivate->GraphicsOutput.QueryMode = BiosVideoGraphicsOutputQueryMode;
-  BiosVideoPrivate->GraphicsOutput.SetMode   = BiosVideoGraphicsOutputSetMode;
-
-  //
-  // Allocate buffer for Graphics Output Protocol mode information
-  //
-  BiosVideoPrivate->GraphicsOutput.Mode = (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *)AllocatePool (
-                                                                                 sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE)
-                                                                                 );
-  if (NULL == BiosVideoPrivate->GraphicsOutput.Mode) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  BiosVideoPrivate->GraphicsOutput.Mode->Info = (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *)AllocatePool (
-                                                                                          sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION)
-                                                                                          );
-  if (NULL ==  BiosVideoPrivate->GraphicsOutput.Mode->Info) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  //
-  // Assume that Graphics Output Protocol will be produced until proven otherwise
-  //
-  BiosVideoPrivate->ProduceGraphicsOutput = TRUE;
-
-  //
-  // Set Gop Device Path, here RemainingDevicePath will not be one End of Device Path Node.
-  //
-  if ((RemainingDevicePath == NULL) || (!IsDevicePathEnd (RemainingDevicePath))) {
-    if (RemainingDevicePath == NULL) {
-      ZeroMem (&AcpiDeviceNode, sizeof (ACPI_ADR_DEVICE_PATH));
-      AcpiDeviceNode.Header.Type    = ACPI_DEVICE_PATH;
-      AcpiDeviceNode.Header.SubType = ACPI_ADR_DP;
-      AcpiDeviceNode.ADR            = ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA, 0, 0);
-      SetDevicePathNodeLength (&AcpiDeviceNode.Header, sizeof (ACPI_ADR_DEVICE_PATH));
-
-      BiosVideoPrivate->GopDevicePath = AppendDevicePathNode (
-                                          ParentDevicePath,
-                                          (EFI_DEVICE_PATH_PROTOCOL *)&AcpiDeviceNode
-                                          );
-    } else {
-      BiosVideoPrivate->GopDevicePath = AppendDevicePathNode (ParentDevicePath, RemainingDevicePath);
-    }
-
-    //
-    // Creat child handle and device path protocol firstly
-    //
-    BiosVideoPrivate->Handle = NULL;
-    Status                   = gBS->InstallMultipleProtocolInterfaces (
-                                      &BiosVideoPrivate->Handle,
-                                      &gEfiDevicePathProtocolGuid,
-                                      BiosVideoPrivate->GopDevicePath,
-                                      NULL
-                                      );
-    if (EFI_ERROR (Status)) {
-      goto Done;
-    }
-  }
-
-  //
-  // Fill in the VGA Mini Port Protocol fields
-  //
-  BiosVideoPrivate->VgaMiniPort.SetMode                   = BiosVideoVgaMiniPortSetMode;
-  BiosVideoPrivate->VgaMiniPort.VgaMemoryOffset           = 0xb8000;
-  BiosVideoPrivate->VgaMiniPort.CrtcAddressRegisterOffset = 0x3d4;
-  BiosVideoPrivate->VgaMiniPort.CrtcDataRegisterOffset    = 0x3d5;
-  BiosVideoPrivate->VgaMiniPort.VgaMemoryBar              = EFI_PCI_IO_PASS_THROUGH_BAR;
-  BiosVideoPrivate->VgaMiniPort.CrtcAddressRegisterBar    = EFI_PCI_IO_PASS_THROUGH_BAR;
-  BiosVideoPrivate->VgaMiniPort.CrtcDataRegisterBar       = EFI_PCI_IO_PASS_THROUGH_BAR;
-
-  //
-  // Child handle need to consume the Legacy Bios protocol
-  //
-  BiosVideoPrivate->LegacyBios = ParentLegacyBios;
-
-  //
-  // When check for VBE, PCI I/O protocol is needed, so use parent's protocol interface temporally
-  //
-  BiosVideoPrivate->PciIo = ParentPciIo;
-
-  //
-  // Check for VESA BIOS Extensions for modes that are compatible with Graphics Output
-  //
-  if (FeaturePcdGet (PcdBiosVideoCheckVbeEnable)) {
-    Status = BiosVideoCheckForVbe (BiosVideoPrivate);
-    DEBUG ((DEBUG_INFO, "BiosVideoCheckForVbe - %r\n", Status));
-  } else {
-    Status = EFI_UNSUPPORTED;
-  }
-
-  if (EFI_ERROR (Status)) {
-    //
-    // The VESA BIOS Extensions are not compatible with Graphics Output, so check for support
-    // for the standard 640x480 16 color VGA mode
-    //
-    DEBUG ((DEBUG_INFO, "VgaCompatible - %x\n", BiosVideoPrivate->VgaCompatible));
-    if (BiosVideoPrivate->VgaCompatible) {
-      if (FeaturePcdGet (PcdBiosVideoCheckVgaEnable)) {
-        Status = BiosVideoCheckForVga (BiosVideoPrivate);
-        DEBUG ((DEBUG_INFO, "BiosVideoCheckForVga - %r\n", Status));
-      } else {
-        Status = EFI_UNSUPPORTED;
-      }
-    }
-
-    if (EFI_ERROR (Status)) {
-      //
-      // Free GOP mode structure if it is not freed before
-      // VgaMiniPort does not need this structure any more
-      //
-      if (BiosVideoPrivate->GraphicsOutput.Mode != NULL) {
-        if (BiosVideoPrivate->GraphicsOutput.Mode->Info != NULL) {
-          FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info);
-          BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL;
-        }
-
-        FreePool (BiosVideoPrivate->GraphicsOutput.Mode);
-        BiosVideoPrivate->GraphicsOutput.Mode = NULL;
-      }
-
-      //
-      // Neither VBE nor the standard 640x480 16 color VGA mode are supported, so do
-      // not produce the Graphics Output protocol.  Instead, produce the VGA MiniPort Protocol.
-      //
-      BiosVideoPrivate->ProduceGraphicsOutput = FALSE;
-
-      //
-      // INT services are available, so on the 80x25 and 80x50 text mode are supported
-      //
-      BiosVideoPrivate->VgaMiniPort.MaxMode = 2;
-    }
-  }
-
-  ProtocolInstalled = FALSE;
-
-  if (BiosVideoPrivate->ProduceGraphicsOutput) {
-    //
-    // Creat child handle and install Graphics Output Protocol,EDID Discovered/Active Protocol
-    //
-    Status = gBS->InstallMultipleProtocolInterfaces (
-                    &BiosVideoPrivate->Handle,
-                    &gEfiGraphicsOutputProtocolGuid,
-                    &BiosVideoPrivate->GraphicsOutput,
-                    &gEfiEdidDiscoveredProtocolGuid,
-                    &BiosVideoPrivate->EdidDiscovered,
-                    &gEfiEdidActiveProtocolGuid,
-                    &BiosVideoPrivate->EdidActive,
-                    NULL
-                    );
-
-    if (!EFI_ERROR (Status)) {
-      //
-      // Open the Parent Handle for the child
-      //
-      Status = gBS->OpenProtocol (
-                      ParentHandle,
-                      &gEfiPciIoProtocolGuid,
-                      (VOID **)&BiosVideoPrivate->PciIo,
-                      This->DriverBindingHandle,
-                      BiosVideoPrivate->Handle,
-                      EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
-                      );
-      if (EFI_ERROR (Status)) {
-        goto Done;
-      }
-
-      ProtocolInstalled = TRUE;
-    }
-  }
-
-  if (!ProtocolInstalled) {
-    //
-    // Install VGA Mini Port Protocol
-    //
-    Status = gBS->InstallMultipleProtocolInterfaces (
-                    &ParentHandle,
-                    &gEfiVgaMiniPortProtocolGuid,
-                    &BiosVideoPrivate->VgaMiniPort,
-                    NULL
-                    );
-  }
-
-Done:
-  if (EFI_ERROR (Status)) {
-    if ((BiosVideoPrivate != NULL) && (BiosVideoPrivate->ExitBootServicesEvent != NULL)) {
-      gBS->CloseEvent (BiosVideoPrivate->ExitBootServicesEvent);
-    }
-
-    //
-    // Free private data structure
-    //
-    BiosVideoDeviceReleaseResource (BiosVideoPrivate);
-  }
-
-  return Status;
-}
-
-/**
-  Deregister an video child handle and free resources.
-
-  @param  This                   Protocol instance pointer.
-  @param  Controller             Video controller handle
-  @param  Handle                 Video child handle
-
-  @return EFI_STATUS
-
-**/
-EFI_STATUS
-BiosVideoChildHandleUninstall (
-  EFI_DRIVER_BINDING_PROTOCOL  *This,
-  EFI_HANDLE                   Controller,
-  EFI_HANDLE                   Handle
-  )
-{
-  EFI_STATUS                    Status;
-  EFI_IA32_REGISTER_SET         Regs;
-  EFI_GRAPHICS_OUTPUT_PROTOCOL  *GraphicsOutput;
-  EFI_VGA_MINI_PORT_PROTOCOL    *VgaMiniPort;
-  BIOS_VIDEO_DEV                *BiosVideoPrivate;
-  EFI_PCI_IO_PROTOCOL           *PciIo;
-
-  BiosVideoPrivate = NULL;
-  GraphicsOutput   = NULL;
-  PciIo            = NULL;
-  Status           = EFI_UNSUPPORTED;
-
-  Status = gBS->OpenProtocol (
-                  Handle,
-                  &gEfiGraphicsOutputProtocolGuid,
-                  (VOID **)&GraphicsOutput,
-                  This->DriverBindingHandle,
-                  Handle,
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                  );
-  if (!EFI_ERROR (Status)) {
-    BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (GraphicsOutput);
-  }
-
-  if (EFI_ERROR (Status)) {
-    Status = gBS->OpenProtocol (
-                    Handle,
-                    &gEfiVgaMiniPortProtocolGuid,
-                    (VOID **)&VgaMiniPort,
-                    This->DriverBindingHandle,
-                    Handle,
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL
-                    );
-    if (!EFI_ERROR (Status)) {
-      BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_VGA_MINI_PORT_THIS (VgaMiniPort);
-    }
-  }
-
-  if (BiosVideoPrivate == NULL) {
-    return EFI_UNSUPPORTED;
-  }
-
-  //
-  // Set the 80x25 Text VGA Mode
-  //
-  Regs.H.AH = 0x00;
-  Regs.H.AL = 0x03;
-  BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-  Regs.H.AH = 0x11;
-  Regs.H.AL = 0x14;
-  Regs.H.BL = 0;
-  BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-  //
-  // Close PCI I/O protocol that opened by child handle
-  //
-  Status = gBS->CloseProtocol (
-                  Controller,
-                  &gEfiPciIoProtocolGuid,
-                  This->DriverBindingHandle,
-                  Handle
-                  );
-
-  //
-  // Uninstall protocols on child handle
-  //
-  if (BiosVideoPrivate->ProduceGraphicsOutput) {
-    Status = gBS->UninstallMultipleProtocolInterfaces (
-                    BiosVideoPrivate->Handle,
-                    &gEfiDevicePathProtocolGuid,
-                    BiosVideoPrivate->GopDevicePath,
-                    &gEfiGraphicsOutputProtocolGuid,
-                    &BiosVideoPrivate->GraphicsOutput,
-                    &gEfiEdidDiscoveredProtocolGuid,
-                    &BiosVideoPrivate->EdidDiscovered,
-                    &gEfiEdidActiveProtocolGuid,
-                    &BiosVideoPrivate->EdidActive,
-                    NULL
-                    );
-  }
-
-  if (!BiosVideoPrivate->ProduceGraphicsOutput) {
-    Status = gBS->UninstallMultipleProtocolInterfaces (
-                    Controller,
-                    &gEfiVgaMiniPortProtocolGuid,
-                    &BiosVideoPrivate->VgaMiniPort,
-                    NULL
-                    );
-  }
-
-  if (EFI_ERROR (Status)) {
-    gBS->OpenProtocol (
-           Controller,
-           &gEfiPciIoProtocolGuid,
-           (VOID **)&PciIo,
-           This->DriverBindingHandle,
-           Handle,
-           EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
-           );
-    return Status;
-  }
-
-  if (PcdGetBool (PcdBiosVideoSetTextVgaModeEnable)) {
-    //
-    // Close EXIT_BOOT_SERIVES Event
-    //
-    gBS->CloseEvent (BiosVideoPrivate->ExitBootServicesEvent);
-  }
-
-  //
-  // Release all allocated resources
-  //
-  BiosVideoDeviceReleaseResource (BiosVideoPrivate);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Release resource for biso video instance.
-
-  @param  BiosVideoPrivate       Video child device private data structure
-
-**/
-VOID
-BiosVideoDeviceReleaseResource (
-  BIOS_VIDEO_DEV  *BiosVideoPrivate
-  )
-{
-  if (BiosVideoPrivate == NULL) {
-    return;
-  }
-
-  //
-  // Release all the resourses occupied by the BIOS_VIDEO_DEV
-  //
-
-  //
-  // Free VGA Frame Buffer
-  //
-  if (BiosVideoPrivate->VgaFrameBuffer != NULL) {
-    FreePool (BiosVideoPrivate->VgaFrameBuffer);
-  }
-
-  //
-  // Free VBE Frame Buffer
-  //
-  if (BiosVideoPrivate->VbeFrameBuffer != NULL) {
-    FreePool (BiosVideoPrivate->VbeFrameBuffer);
-  }
-
-  //
-  // Free line buffer
-  //
-  if (BiosVideoPrivate->LineBuffer != NULL) {
-    FreePool (BiosVideoPrivate->LineBuffer);
-  }
-
-  //
-  // Free mode data
-  //
-  if (BiosVideoPrivate->ModeData != NULL) {
-    FreePool (BiosVideoPrivate->ModeData);
-  }
-
-  //
-  // Free memory allocated below 1MB
-  //
-  if (BiosVideoPrivate->PagesBelow1MB != 0) {
-    gBS->FreePages (BiosVideoPrivate->PagesBelow1MB, BiosVideoPrivate->NumberOfPagesBelow1MB);
-  }
-
-  if (BiosVideoPrivate->VbeSaveRestorePages != 0) {
-    gBS->FreePages (BiosVideoPrivate->VbeSaveRestoreBuffer, BiosVideoPrivate->VbeSaveRestorePages);
-  }
-
-  //
-  // Free graphics output protocol occupied resource
-  //
-  if (BiosVideoPrivate->GraphicsOutput.Mode != NULL) {
-    if (BiosVideoPrivate->GraphicsOutput.Mode->Info != NULL) {
-      FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info);
-      BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL;
-    }
-
-    FreePool (BiosVideoPrivate->GraphicsOutput.Mode);
-    BiosVideoPrivate->GraphicsOutput.Mode = NULL;
-  }
-
-  //
-  // Free EDID discovered protocol occupied resource
-  //
-  if (BiosVideoPrivate->EdidDiscovered.Edid != NULL) {
-    FreePool (BiosVideoPrivate->EdidDiscovered.Edid);
-  }
-
-  //
-  // Free EDID active protocol occupied resource
-  //
-  if (BiosVideoPrivate->EdidActive.Edid != NULL) {
-    FreePool (BiosVideoPrivate->EdidActive.Edid);
-  }
-
-  if (BiosVideoPrivate->GopDevicePath != NULL) {
-    FreePool (BiosVideoPrivate->GopDevicePath);
-  }
-
-  FreePool (BiosVideoPrivate);
-
-  return;
-}
-
-/**
-  Generate a search key for a specified timing data.
-
-  @param  EdidTiming             Pointer to EDID timing
-
-  @return The 32 bit unique key for search.
-
-**/
-UINT32
-CalculateEdidKey (
-  VESA_BIOS_EXTENSIONS_EDID_TIMING  *EdidTiming
-  )
-{
-  UINT32  Key;
-
-  //
-  // Be sure no conflicts for all standard timing defined by VESA.
-  //
-  Key = (EdidTiming->HorizontalResolution * 2) + EdidTiming->VerticalResolution;
-  return Key;
-}
-
-/**
-  Parse the Established Timing and Standard Timing in EDID data block.
-
-  @param  EdidBuffer             Pointer to EDID data block
-  @param  ValidEdidTiming        Valid EDID timing information
-
-  @retval TRUE                   The EDID data is valid.
-  @retval FALSE                  The EDID data is invalid.
-
-**/
-BOOLEAN
-ParseEdidData (
-  UINT8                                   *EdidBuffer,
-  VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING  *ValidEdidTiming
-  )
-{
-  UINT8                                 CheckSum;
-  UINT32                                Index;
-  UINT32                                ValidNumber;
-  UINT32                                TimingBits;
-  UINT8                                 *BufferIndex;
-  UINT16                                HorizontalResolution;
-  UINT16                                VerticalResolution;
-  UINT8                                 AspectRatio;
-  UINT8                                 RefreshRate;
-  VESA_BIOS_EXTENSIONS_EDID_TIMING      TempTiming;
-  VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK  *EdidDataBlock;
-
-  EdidDataBlock = (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *)EdidBuffer;
-
-  //
-  // Check the checksum of EDID data
-  //
-  CheckSum = 0;
-  for (Index = 0; Index < VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE; Index++) {
-    CheckSum = (UINT8)(CheckSum + EdidBuffer[Index]);
-  }
-
-  if (CheckSum != 0) {
-    return FALSE;
-  }
-
-  ValidNumber = 0;
-  gBS->SetMem (ValidEdidTiming, sizeof (VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING), 0);
-
-  if ((EdidDataBlock->EstablishedTimings[0] != 0) ||
-      (EdidDataBlock->EstablishedTimings[1] != 0) ||
-      (EdidDataBlock->EstablishedTimings[2] != 0)
-      )
-  {
-    //
-    // Established timing data
-    //
-    TimingBits = EdidDataBlock->EstablishedTimings[0] |
-                 (EdidDataBlock->EstablishedTimings[1] << 8) |
-                 ((EdidDataBlock->EstablishedTimings[2] & 0x80) << 9);
-    for (Index = 0; Index < VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER; Index++) {
-      if ((TimingBits & 0x1) != 0) {
-        DEBUG ((
-          DEBUG_INFO,
-          "Established Timing: %d x %d\n",
-          mEstablishedEdidTiming[Index].HorizontalResolution,
-          mEstablishedEdidTiming[Index].VerticalResolution
-          ));
-        ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&mEstablishedEdidTiming[Index]);
-        ValidNumber++;
-      }
-
-      TimingBits = TimingBits >> 1;
-    }
-  }
-
-  //
-  // Parse the standard timing data
-  //
-  BufferIndex = &EdidDataBlock->StandardTimingIdentification[0];
-  for (Index = 0; Index < 8; Index++) {
-    //
-    // Check if this is a valid Standard Timing entry
-    // VESA documents unused fields should be set to 01h
-    //
-    if ((BufferIndex[0] != 0x1) && (BufferIndex[1] != 0x1)) {
-      //
-      // A valid Standard Timing
-      //
-      HorizontalResolution = (UINT16)(BufferIndex[0] * 8 + 248);
-      AspectRatio          = (UINT8)(BufferIndex[1] >> 6);
-      switch (AspectRatio) {
-        case 0:
-          VerticalResolution = (UINT16)(HorizontalResolution / 16 * 10);
-          break;
-        case 1:
-          VerticalResolution = (UINT16)(HorizontalResolution / 4 * 3);
-          break;
-        case 2:
-          VerticalResolution = (UINT16)(HorizontalResolution / 5 * 4);
-          break;
-        case 3:
-          VerticalResolution = (UINT16)(HorizontalResolution / 16 * 9);
-          break;
-        default:
-          VerticalResolution = (UINT16)(HorizontalResolution / 4 * 3);
-          break;
-      }
-
-      RefreshRate = (UINT8)((BufferIndex[1] & 0x1f) + 60);
-      DEBUG ((DEBUG_INFO, "Standard Timing: %d x %d\n", HorizontalResolution, VerticalResolution));
-      TempTiming.HorizontalResolution   = HorizontalResolution;
-      TempTiming.VerticalResolution     = VerticalResolution;
-      TempTiming.RefreshRate            = RefreshRate;
-      ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&TempTiming);
-      ValidNumber++;
-    }
-
-    BufferIndex += 2;
-  }
-
-  //
-  // Parse the Detailed Timing data
-  //
-  BufferIndex = &EdidDataBlock->DetailedTimingDescriptions[0];
-  for (Index = 0; Index < 4; Index++, BufferIndex += VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE) {
-    if ((BufferIndex[0] == 0x0) && (BufferIndex[1] == 0x0)) {
-      //
-      // Check if this is a valid Detailed Timing Descriptor
-      // If first 2 bytes are zero, it is monitor descriptor other than detailed timing descriptor
-      //
-      continue;
-    }
-
-    //
-    // Calculate Horizontal and Vertical resolution
-    //
-    TempTiming.HorizontalResolution = ((UINT16)(BufferIndex[4] & 0xF0) << 4) | (BufferIndex[2]);
-    TempTiming.VerticalResolution   = ((UINT16)(BufferIndex[7] & 0xF0) << 4) | (BufferIndex[5]);
-    DEBUG ((
-      DEBUG_INFO,
-      "Detailed Timing %d: %d x %d\n",
-      Index,
-      TempTiming.HorizontalResolution,
-      TempTiming.VerticalResolution
-      ));
-    ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&TempTiming);
-    ValidNumber++;
-  }
-
-  ValidEdidTiming->ValidNumber = ValidNumber;
-  return TRUE;
-}
-
-/**
-  Search a specified Timing in all the valid EDID timings.
-
-  @param  ValidEdidTiming        All valid EDID timing information.
-  @param  EdidTiming             The Timing to search for.
-
-  @retval TRUE                   Found.
-  @retval FALSE                  Not found.
-
-**/
-BOOLEAN
-SearchEdidTiming (
-  VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING  *ValidEdidTiming,
-  VESA_BIOS_EXTENSIONS_EDID_TIMING        *EdidTiming
-  )
-{
-  UINT32  Index;
-  UINT32  Key;
-
-  Key = CalculateEdidKey (EdidTiming);
-
-  for (Index = 0; Index < ValidEdidTiming->ValidNumber; Index++) {
-    if (Key == ValidEdidTiming->Key[Index]) {
-      return TRUE;
-    }
-  }
-
-  return FALSE;
-}
-
-/**
-  Check if all video child handles have been uninstalled.
-
-  @param  Controller             Video controller handle
-
-  @return TRUE                   Child handles exist.
-  @return FALSE                  All video child handles have been uninstalled.
-
-**/
-BOOLEAN
-HasChildHandle (
-  IN EFI_HANDLE  Controller
-  )
-{
-  UINTN                                Index;
-  EFI_OPEN_PROTOCOL_INFORMATION_ENTRY  *OpenInfoBuffer;
-  UINTN                                EntryCount;
-  BOOLEAN                              HasChild;
-
-  EntryCount = 0;
-  HasChild   = FALSE;
-  gBS->OpenProtocolInformation (
-         Controller,
-         &gEfiPciIoProtocolGuid,
-         &OpenInfoBuffer,
-         &EntryCount
-         );
-  for (Index = 0; Index < EntryCount; Index++) {
-    if ((OpenInfoBuffer[Index].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) != 0) {
-      HasChild = TRUE;
-    }
-  }
-
-  return HasChild;
-}
-
-/**
-  Check for VBE device.
-
-  @param  BiosVideoPrivate       Pointer to BIOS_VIDEO_DEV structure
-
-  @retval EFI_SUCCESS            VBE device found
-
-**/
-EFI_STATUS
-BiosVideoCheckForVbe (
-  IN OUT BIOS_VIDEO_DEV  *BiosVideoPrivate
-  )
-{
-  EFI_STATUS                              Status;
-  EFI_IA32_REGISTER_SET                   Regs;
-  UINT16                                  *ModeNumberPtr;
-  UINT16                                  VbeModeNumber;
-  BOOLEAN                                 ModeFound;
-  BOOLEAN                                 EdidFound;
-  BIOS_VIDEO_MODE_DATA                    *ModeBuffer;
-  BIOS_VIDEO_MODE_DATA                    *CurrentModeData;
-  UINTN                                   PreferMode;
-  UINTN                                   ModeNumber;
-  VESA_BIOS_EXTENSIONS_EDID_TIMING        Timing;
-  VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING  ValidEdidTiming;
-  EFI_EDID_OVERRIDE_PROTOCOL              *EdidOverride;
-  UINT32                                  EdidAttributes;
-  BOOLEAN                                 EdidOverrideFound;
-  UINTN                                   EdidOverrideDataSize;
-  UINT8                                   *EdidOverrideDataBlock;
-  UINTN                                   EdidActiveDataSize;
-  UINT8                                   *EdidActiveDataBlock;
-  UINT32                                  HighestHorizontalResolution;
-  UINT32                                  HighestVerticalResolution;
-  UINTN                                   HighestResolutionMode;
-
-  EdidFound                   = TRUE;
-  EdidOverrideFound           = FALSE;
-  EdidOverrideDataBlock       = NULL;
-  EdidActiveDataSize          = 0;
-  EdidActiveDataBlock         = NULL;
-  HighestHorizontalResolution = 0;
-  HighestVerticalResolution   = 0;
-  HighestResolutionMode       = 0;
-
-  //
-  // Allocate buffer under 1MB for VBE data structures
-  //
-  BiosVideoPrivate->NumberOfPagesBelow1MB = EFI_SIZE_TO_PAGES (
-                                              sizeof (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK) +
-                                              sizeof (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK) +
-                                              sizeof (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK) +
-                                              sizeof (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK)
-                                              );
-
-  BiosVideoPrivate->PagesBelow1MB = 0x00100000 - 1;
-
-  Status = gBS->AllocatePages (
-                  AllocateMaxAddress,
-                  EfiBootServicesData,
-                  BiosVideoPrivate->NumberOfPagesBelow1MB,
-                  &BiosVideoPrivate->PagesBelow1MB
-                  );
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  ZeroMem (&ValidEdidTiming, sizeof (VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING));
-
-  //
-  // Fill in the VBE related data structures
-  //
-  BiosVideoPrivate->VbeInformationBlock     = (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK *)(UINTN)(BiosVideoPrivate->PagesBelow1MB);
-  BiosVideoPrivate->VbeModeInformationBlock = (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK *)(BiosVideoPrivate->VbeInformationBlock + 1);
-  BiosVideoPrivate->VbeEdidDataBlock        = (VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK *)(BiosVideoPrivate->VbeModeInformationBlock + 1);
-  BiosVideoPrivate->VbeCrtcInformationBlock = (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK *)(BiosVideoPrivate->VbeEdidDataBlock + 1);
-  BiosVideoPrivate->VbeSaveRestorePages     = 0;
-  BiosVideoPrivate->VbeSaveRestoreBuffer    = 0;
-
-  //
-  // Test to see if the Video Adapter is compliant with VBE 3.0
-  //
-  gBS->SetMem (&Regs, sizeof (Regs), 0);
-  Regs.X.AX = VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION;
-  gBS->SetMem (BiosVideoPrivate->VbeInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK), 0);
-  BiosVideoPrivate->VbeInformationBlock->VESASignature = VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE;
-  Regs.X.ES                                            = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeInformationBlock);
-  Regs.X.DI                                            = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeInformationBlock);
-
-  BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-  Status = EFI_DEVICE_ERROR;
-
-  //
-  // See if the VESA call succeeded
-  //
-  if (Regs.X.AX != VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) {
-    return Status;
-  }
-
-  //
-  // Check for 'VESA' signature
-  //
-  if (BiosVideoPrivate->VbeInformationBlock->VESASignature != VESA_BIOS_EXTENSIONS_VESA_SIGNATURE) {
-    return Status;
-  }
-
-  //
-  // Check to see if this is VBE 2.0 or higher
-  //
-  if (BiosVideoPrivate->VbeInformationBlock->VESAVersion < VESA_BIOS_EXTENSIONS_VERSION_2_0) {
-    return Status;
-  }
-
-  EdidFound            = FALSE;
-  EdidAttributes       = 0xff;
-  EdidOverrideDataSize = 0;
-
-  //
-  // Find EDID Override protocol firstly, this protocol is installed by platform if needed.
-  //
-  Status = gBS->LocateProtocol (
-                  &gEfiEdidOverrideProtocolGuid,
-                  NULL,
-                  (VOID **)&EdidOverride
-                  );
-  if (!EFI_ERROR (Status)) {
-    //
-    // Allocate double size of VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE to avoid overflow
-    //
-    EdidOverrideDataBlock = AllocatePool (VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE * 2);
-    if (NULL == EdidOverrideDataBlock) {
-      Status = EFI_OUT_OF_RESOURCES;
-      goto Done;
-    }
-
-    Status = EdidOverride->GetEdid (
-                             EdidOverride,
-                             BiosVideoPrivate->Handle,
-                             &EdidAttributes,
-                             &EdidOverrideDataSize,
-                             (UINT8 **)&EdidOverrideDataBlock
-                             );
-    if (!EFI_ERROR (Status)  &&
-        (EdidAttributes == 0) &&
-        (EdidOverrideDataSize != 0))
-    {
-      //
-      // Succeeded to get EDID Override Data
-      //
-      EdidOverrideFound = TRUE;
-    }
-  }
-
-  if (!EdidOverrideFound || (EdidAttributes == EFI_EDID_OVERRIDE_DONT_OVERRIDE)) {
-    //
-    // If EDID Override data doesn't exist or EFI_EDID_OVERRIDE_DONT_OVERRIDE returned,
-    // read EDID information through INT10 call
-    //
-
-    gBS->SetMem (&Regs, sizeof (Regs), 0);
-    Regs.X.AX = VESA_BIOS_EXTENSIONS_EDID;
-    Regs.X.BX = 1;
-    Regs.X.CX = 0;
-    Regs.X.DX = 0;
-    Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeEdidDataBlock);
-    Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeEdidDataBlock);
-
-    BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-    //
-    // See if the VESA call succeeded
-    //
-    if (Regs.X.AX == VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) {
-      //
-      // Set EDID Discovered Data
-      //
-      BiosVideoPrivate->EdidDiscovered.SizeOfEdid = VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE;
-      BiosVideoPrivate->EdidDiscovered.Edid       = (UINT8 *)AllocateCopyPool (
-                                                               VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE,
-                                                               BiosVideoPrivate->VbeEdidDataBlock
-                                                               );
-
-      if (NULL == BiosVideoPrivate->EdidDiscovered.Edid) {
-        Status = EFI_OUT_OF_RESOURCES;
-        goto Done;
-      }
-
-      EdidFound = TRUE;
-    }
-  }
-
-  if (EdidFound) {
-    EdidActiveDataSize  = VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE;
-    EdidActiveDataBlock = BiosVideoPrivate->EdidDiscovered.Edid;
-  } else if (EdidOverrideFound) {
-    EdidActiveDataSize  = EdidOverrideDataSize;
-    EdidActiveDataBlock = EdidOverrideDataBlock;
-    EdidFound           = TRUE;
-  }
-
-  if (EdidFound) {
-    //
-    // Parse EDID data structure to retrieve modes supported by monitor
-    //
-    if (ParseEdidData ((UINT8 *)EdidActiveDataBlock, &ValidEdidTiming)) {
-      //
-      // Copy EDID Override Data to EDID Active Data
-      //
-      BiosVideoPrivate->EdidActive.SizeOfEdid = (UINT32)EdidActiveDataSize;
-      BiosVideoPrivate->EdidActive.Edid       = (UINT8 *)AllocateCopyPool (
-                                                           EdidActiveDataSize,
-                                                           EdidActiveDataBlock
-                                                           );
-      if (NULL ==  BiosVideoPrivate->EdidActive.Edid) {
-        Status = EFI_OUT_OF_RESOURCES;
-        goto Done;
-      }
-    }
-  } else {
-    BiosVideoPrivate->EdidActive.SizeOfEdid = 0;
-    BiosVideoPrivate->EdidActive.Edid       = NULL;
-    EdidFound                               = FALSE;
-  }
-
-  //
-  // Walk through the mode list to see if there is at least one mode the is compatible with the EDID mode
-  //
-  ModeNumberPtr = (UINT16 *)
-                  (
-                   (((UINTN)BiosVideoPrivate->VbeInformationBlock->VideoModePtr & 0xffff0000) >> 12) |
-                   ((UINTN)BiosVideoPrivate->VbeInformationBlock->VideoModePtr & 0x0000ffff)
-                  );
-
-  PreferMode = 0;
-  ModeNumber = 0;
-
-  //
-  // ModeNumberPtr may be not 16-byte aligned, so ReadUnaligned16 is used to access the buffer pointed by ModeNumberPtr.
-  //
-  for (VbeModeNumber = ReadUnaligned16 (ModeNumberPtr);
-       VbeModeNumber != VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST;
-       VbeModeNumber = ReadUnaligned16 (++ModeNumberPtr))
-  {
-    //
-    // Make sure this is a mode number defined by the VESA VBE specification.  If it isn'tm then skip this mode number.
-    //
-    if ((VbeModeNumber & VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA) == 0) {
-      continue;
-    }
-
-    //
-    // Get the information about the mode
-    //
-    gBS->SetMem (&Regs, sizeof (Regs), 0);
-    Regs.X.AX = VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION;
-    Regs.X.CX = VbeModeNumber;
-    gBS->SetMem (BiosVideoPrivate->VbeModeInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK), 0);
-    Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeModeInformationBlock);
-    Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeModeInformationBlock);
-
-    BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-    //
-    // See if the call succeeded.  If it didn't, then try the next mode.
-    //
-    if (Regs.X.AX != VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) {
-      continue;
-    }
-
-    //
-    // See if the mode supports color.  If it doesn't then try the next mode.
-    //
-    if ((BiosVideoPrivate->VbeModeInformationBlock->ModeAttributes & VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR) == 0) {
-      continue;
-    }
-
-    //
-    // See if the mode supports graphics.  If it doesn't then try the next mode.
-    //
-    if ((BiosVideoPrivate->VbeModeInformationBlock->ModeAttributes & VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS) == 0) {
-      continue;
-    }
-
-    //
-    // See if the mode supports a linear frame buffer.  If it doesn't then try the next mode.
-    //
-    if ((BiosVideoPrivate->VbeModeInformationBlock->ModeAttributes & VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER) == 0) {
-      continue;
-    }
-
-    //
-    // See if the mode supports 32 bit color.  If it doesn't then try the next mode.
-    // 32 bit mode can be implemented by 24 Bits Per Pixels. Also make sure the
-    // number of bits per pixel is a multiple of 8 or more than 32 bits per pixel
-    //
-    if (BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel < 24) {
-      continue;
-    }
-
-    if (BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel > 32) {
-      continue;
-    }
-
-    if ((BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel % 8) != 0) {
-      continue;
-    }
-
-    //
-    // See if the physical base pointer for the linear mode is valid.  If it isn't then try the next mode.
-    //
-    if (BiosVideoPrivate->VbeModeInformationBlock->PhysBasePtr == 0) {
-      continue;
-    }
-
-    DEBUG ((
-      DEBUG_INFO,
-      "Video Controller Mode 0x%x: %d x %d\n",
-      VbeModeNumber,
-      BiosVideoPrivate->VbeModeInformationBlock->XResolution,
-      BiosVideoPrivate->VbeModeInformationBlock->YResolution
-      ));
-
-    if (EdidFound && (ValidEdidTiming.ValidNumber > 0)) {
-      //
-      // EDID exist, check whether this mode match with any mode in EDID
-      //
-      Timing.HorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution;
-      Timing.VerticalResolution   = BiosVideoPrivate->VbeModeInformationBlock->YResolution;
-      if (!SearchEdidTiming (&ValidEdidTiming, &Timing)) {
-        //
-        // When EDID comes from INT10 call, EDID does not include 800x600, 640x480 and 1024x768,
-        // but INT10 can support these modes, we add them into GOP mode.
-        //
-        if ((BiosVideoPrivate->EdidDiscovered.SizeOfEdid != 0) &&
-            !(((Timing.HorizontalResolution) == 1024) && (Timing.VerticalResolution == 768)) &&
-            !(((Timing.HorizontalResolution) == 800) && (Timing.VerticalResolution == 600)) &&
-            !(((Timing.HorizontalResolution) == 640) && (Timing.VerticalResolution == 480)))
-        {
-          continue;
-        }
-      }
-    }
-
-    //
-    // Select a reasonable mode to be set for current display mode
-    //
-    ModeFound = FALSE;
-
-    if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == 1024) &&
-        (BiosVideoPrivate->VbeModeInformationBlock->YResolution == 768)
-        )
-    {
-      ModeFound = TRUE;
-    }
-
-    if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == 800) &&
-        (BiosVideoPrivate->VbeModeInformationBlock->YResolution == 600)
-        )
-    {
-      ModeFound  = TRUE;
-      PreferMode = ModeNumber;
-    }
-
-    if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == 640) &&
-        (BiosVideoPrivate->VbeModeInformationBlock->YResolution == 480)
-        )
-    {
-      ModeFound = TRUE;
-    }
-
-    if ((!EdidFound) && (!ModeFound)) {
-      //
-      // When no EDID exist, only select three possible resolutions, i.e. 1024x768, 800x600, 640x480
-      //
-      continue;
-    }
-
-    //
-    // Record the highest resolution mode to set later
-    //
-    if ((BiosVideoPrivate->VbeModeInformationBlock->XResolution > HighestHorizontalResolution) ||
-        ((BiosVideoPrivate->VbeModeInformationBlock->XResolution == HighestHorizontalResolution) &&
-         (BiosVideoPrivate->VbeModeInformationBlock->YResolution > HighestVerticalResolution)))
-    {
-      HighestHorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution;
-      HighestVerticalResolution   = BiosVideoPrivate->VbeModeInformationBlock->YResolution;
-      HighestResolutionMode       = ModeNumber;
-    }
-
-    //
-    // Add mode to the list of available modes
-    //
-    ModeNumber++;
-    ModeBuffer = (BIOS_VIDEO_MODE_DATA *)AllocatePool (
-                                           ModeNumber * sizeof (BIOS_VIDEO_MODE_DATA)
-                                           );
-    if (NULL == ModeBuffer) {
-      Status = EFI_OUT_OF_RESOURCES;
-      goto Done;
-    }
-
-    if (ModeNumber > 1) {
-      CopyMem (
-        ModeBuffer,
-        BiosVideoPrivate->ModeData,
-        (ModeNumber - 1) * sizeof (BIOS_VIDEO_MODE_DATA)
-        );
-    }
-
-    if (BiosVideoPrivate->ModeData != NULL) {
-      FreePool (BiosVideoPrivate->ModeData);
-    }
-
-    CurrentModeData                = &ModeBuffer[ModeNumber - 1];
-    CurrentModeData->VbeModeNumber = VbeModeNumber;
-    if (BiosVideoPrivate->VbeInformationBlock->VESAVersion >= VESA_BIOS_EXTENSIONS_VERSION_3_0) {
-      CurrentModeData->BytesPerScanLine  = BiosVideoPrivate->VbeModeInformationBlock->LinBytesPerScanLine;
-      CurrentModeData->Red.Position      = BiosVideoPrivate->VbeModeInformationBlock->LinRedFieldPosition;
-      CurrentModeData->Red.Mask          = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinRedMaskSize) - 1);
-      CurrentModeData->Blue.Position     = BiosVideoPrivate->VbeModeInformationBlock->LinBlueFieldPosition;
-      CurrentModeData->Blue.Mask         = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinBlueMaskSize) - 1);
-      CurrentModeData->Green.Position    = BiosVideoPrivate->VbeModeInformationBlock->LinGreenFieldPosition;
-      CurrentModeData->Green.Mask        = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinGreenMaskSize) - 1);
-      CurrentModeData->Reserved.Position = BiosVideoPrivate->VbeModeInformationBlock->LinRsvdFieldPosition;
-      CurrentModeData->Reserved.Mask     = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->LinRsvdMaskSize) - 1);
-    } else {
-      CurrentModeData->BytesPerScanLine  = BiosVideoPrivate->VbeModeInformationBlock->BytesPerScanLine;
-      CurrentModeData->Red.Position      = BiosVideoPrivate->VbeModeInformationBlock->RedFieldPosition;
-      CurrentModeData->Red.Mask          = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->RedMaskSize) - 1);
-      CurrentModeData->Blue.Position     = BiosVideoPrivate->VbeModeInformationBlock->BlueFieldPosition;
-      CurrentModeData->Blue.Mask         = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->BlueMaskSize) - 1);
-      CurrentModeData->Green.Position    = BiosVideoPrivate->VbeModeInformationBlock->GreenFieldPosition;
-      CurrentModeData->Green.Mask        = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->GreenMaskSize) - 1);
-      CurrentModeData->Reserved.Position = BiosVideoPrivate->VbeModeInformationBlock->RsvdFieldPosition;
-      CurrentModeData->Reserved.Mask     = (UINT8)((1 << BiosVideoPrivate->VbeModeInformationBlock->RsvdMaskSize) - 1);
-    }
-
-    CurrentModeData->PixelFormat = PixelBitMask;
-    if ((BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel == 32) &&
-        (CurrentModeData->Red.Mask == 0xff) && (CurrentModeData->Green.Mask == 0xff) && (CurrentModeData->Blue.Mask == 0xff))
-    {
-      if ((CurrentModeData->Red.Position == 0) && (CurrentModeData->Green.Position == 8) && (CurrentModeData->Blue.Position == 16)) {
-        CurrentModeData->PixelFormat = PixelRedGreenBlueReserved8BitPerColor;
-      } else if ((CurrentModeData->Blue.Position == 0) && (CurrentModeData->Green.Position == 8) && (CurrentModeData->Red.Position == 16)) {
-        CurrentModeData->PixelFormat = PixelBlueGreenRedReserved8BitPerColor;
-      }
-    }
-
-    CurrentModeData->PixelBitMask.RedMask      = ((UINT32)CurrentModeData->Red.Mask) << CurrentModeData->Red.Position;
-    CurrentModeData->PixelBitMask.GreenMask    = ((UINT32)CurrentModeData->Green.Mask) << CurrentModeData->Green.Position;
-    CurrentModeData->PixelBitMask.BlueMask     = ((UINT32)CurrentModeData->Blue.Mask) << CurrentModeData->Blue.Position;
-    CurrentModeData->PixelBitMask.ReservedMask = ((UINT32)CurrentModeData->Reserved.Mask) << CurrentModeData->Reserved.Position;
-
-    CurrentModeData->LinearFrameBuffer    = (VOID *)(UINTN)BiosVideoPrivate->VbeModeInformationBlock->PhysBasePtr;
-    CurrentModeData->HorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution;
-    CurrentModeData->VerticalResolution   = BiosVideoPrivate->VbeModeInformationBlock->YResolution;
-
-    CurrentModeData->BitsPerPixel    = BiosVideoPrivate->VbeModeInformationBlock->BitsPerPixel;
-    CurrentModeData->FrameBufferSize = CurrentModeData->BytesPerScanLine * CurrentModeData->VerticalResolution;
-    //
-    // Make sure the FrameBufferSize does not exceed the max available frame buffer size reported by VEB.
-    //
-    ASSERT (CurrentModeData->FrameBufferSize <= ((UINT32)BiosVideoPrivate->VbeInformationBlock->TotalMemory * 64 * 1024));
-
-    BiosVideoPrivate->ModeData = ModeBuffer;
-  }
-
-  //
-  // Check to see if we found any modes that are compatible with GRAPHICS OUTPUT
-  //
-  if (ModeNumber == 0) {
-    Status = EFI_DEVICE_ERROR;
-    goto Done;
-  }
-
-  //
-  // Assign Gop's Blt function
-  //
-  BiosVideoPrivate->GraphicsOutput.Blt = BiosVideoGraphicsOutputVbeBlt;
-
-  BiosVideoPrivate->GraphicsOutput.Mode->MaxMode = (UINT32)ModeNumber;
-  //
-  // Current mode is unknow till now, set it to an invalid mode.
-  //
-  BiosVideoPrivate->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;
-
-  //
-  // Find the best mode to initialize
-  //
-  if ((PcdGet32 (PcdVideoHorizontalResolution) == 0x0) || (PcdGet32 (PcdVideoVerticalResolution) == 0x0)) {
-    DEBUG_CODE (
-      BIOS_VIDEO_MODE_DATA    *ModeData;
-      ModeData = &BiosVideoPrivate->ModeData[HighestResolutionMode];
-      DEBUG ((
-        DEBUG_INFO,
-        "BiosVideo set highest resolution %d x %d\n",
-        ModeData->HorizontalResolution,
-        ModeData->VerticalResolution
-        ));
-      );
-    PreferMode = HighestResolutionMode;
-  }
-
-  Status = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, (UINT32)PreferMode);
-  if (EFI_ERROR (Status)) {
-    for (PreferMode = 0; PreferMode < ModeNumber; PreferMode++) {
-      Status = BiosVideoGraphicsOutputSetMode (
-                 &BiosVideoPrivate->GraphicsOutput,
-                 (UINT32)PreferMode
-                 );
-      if (!EFI_ERROR (Status)) {
-        break;
-      }
-    }
-
-    if (PreferMode == ModeNumber) {
-      //
-      // None mode is set successfully.
-      //
-      goto Done;
-    }
-  }
-
-Done:
-  //
-  // If there was an error, then free the mode structure
-  //
-  if (EFI_ERROR (Status)) {
-    if (BiosVideoPrivate->ModeData != NULL) {
-      FreePool (BiosVideoPrivate->ModeData);
-      BiosVideoPrivate->ModeData = NULL;
-      BiosVideoPrivate->MaxMode  = 0;
-    }
-
-    if (EdidOverrideDataBlock != NULL) {
-      FreePool (EdidOverrideDataBlock);
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Check for VGA device.
-
-  @param  BiosVideoPrivate       Pointer to BIOS_VIDEO_DEV structure
-
-  @retval EFI_SUCCESS            Standard VGA device found
-
-**/
-EFI_STATUS
-BiosVideoCheckForVga (
-  IN OUT BIOS_VIDEO_DEV  *BiosVideoPrivate
-  )
-{
-  EFI_STATUS            Status;
-  BIOS_VIDEO_MODE_DATA  *ModeBuffer;
-
-  Status = EFI_UNSUPPORTED;
-
-  //
-  // Assign Gop's Blt function
-  //
-  BiosVideoPrivate->GraphicsOutput.Blt = BiosVideoGraphicsOutputVgaBlt;
-
-  //
-  // Add mode to the list of available modes
-  // caller should guarantee that Mode has been allocated.
-  //
-  ASSERT (BiosVideoPrivate->GraphicsOutput.Mode != NULL);
-  BiosVideoPrivate->GraphicsOutput.Mode->MaxMode = 1;
-
-  ModeBuffer = (BIOS_VIDEO_MODE_DATA *)AllocatePool (
-                                         sizeof (BIOS_VIDEO_MODE_DATA)
-                                         );
-  if (NULL == ModeBuffer) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Done;
-  }
-
-  ModeBuffer->VbeModeNumber        = 0x0012;
-  ModeBuffer->BytesPerScanLine     = 640;
-  ModeBuffer->LinearFrameBuffer    = (VOID *)(UINTN)(0xa0000);
-  ModeBuffer->HorizontalResolution = 640;
-  ModeBuffer->VerticalResolution   = 480;
-  ModeBuffer->PixelFormat          = PixelBltOnly;
-  ModeBuffer->BitsPerPixel         = 8;
-  ModeBuffer->ColorDepth           = 32;
-  ModeBuffer->RefreshRate          = 60;
-
-  BiosVideoPrivate->ModeData = ModeBuffer;
-
-  //
-  // Test to see if the Video Adapter support the 640x480 16 color mode
-  //
-  BiosVideoPrivate->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;
-  Status                                      = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, 0);
-
-Done:
-  //
-  // If there was an error, then free the mode structure
-  //
-  if (EFI_ERROR (Status)) {
-    if (BiosVideoPrivate->ModeData != NULL) {
-      FreePool (BiosVideoPrivate->ModeData);
-      BiosVideoPrivate->ModeData = NULL;
-    }
-
-    if (BiosVideoPrivate->GraphicsOutput.Mode != NULL) {
-      if (BiosVideoPrivate->GraphicsOutput.Mode->Info != NULL) {
-        FreePool (BiosVideoPrivate->GraphicsOutput.Mode->Info);
-        BiosVideoPrivate->GraphicsOutput.Mode->Info = NULL;
-      }
-
-      FreePool (BiosVideoPrivate->GraphicsOutput.Mode);
-      BiosVideoPrivate->GraphicsOutput.Mode = NULL;
-    }
-  }
-
-  return Status;
-}
-
-//
-// Graphics Output Protocol Member Functions for VESA BIOS Extensions
-//
-
-/**
-  Graphics Output protocol interface to get video mode.
-
-  @param  This                   Protocol instance pointer.
-  @param  ModeNumber             The mode number to return information on.
-  @param  SizeOfInfo             A pointer to the size, in bytes, of the Info
-                                 buffer.
-  @param  Info                   Caller allocated buffer that returns information
-                                 about ModeNumber.
-
-  @retval EFI_SUCCESS            Mode information returned.
-  @retval EFI_DEVICE_ERROR       A hardware error occurred trying to retrieve the
-                                 video mode.
-  @retval EFI_NOT_STARTED        Video display is not initialized. Call SetMode ()
-  @retval EFI_INVALID_PARAMETER  One of the input args was NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputQueryMode (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This,
-  IN  UINT32                                ModeNumber,
-  OUT UINTN                                 *SizeOfInfo,
-  OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION  **Info
-  )
-{
-  BIOS_VIDEO_DEV        *BiosVideoPrivate;
-  BIOS_VIDEO_MODE_DATA  *ModeData;
-
-  BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This);
-
-  if (BiosVideoPrivate->HardwareNeedsStarting) {
-    REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-      EFI_ERROR_CODE | EFI_ERROR_MINOR,
-      EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_OUTPUT_ERROR,
-      BiosVideoPrivate->GopDevicePath
-      );
-    return EFI_NOT_STARTED;
-  }
-
-  if ((This == NULL) || (Info == NULL) || (SizeOfInfo == NULL) || (ModeNumber >= This->Mode->MaxMode)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  *Info = (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *)AllocatePool (
-                                                    sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION)
-                                                    );
-  if (NULL == *Info) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
-
-  ModeData                      = &BiosVideoPrivate->ModeData[ModeNumber];
-  (*Info)->Version              = 0;
-  (*Info)->HorizontalResolution = ModeData->HorizontalResolution;
-  (*Info)->VerticalResolution   = ModeData->VerticalResolution;
-  (*Info)->PixelFormat          = ModeData->PixelFormat;
-  CopyMem (&((*Info)->PixelInformation), &(ModeData->PixelBitMask), sizeof (ModeData->PixelBitMask));
-
-  (*Info)->PixelsPerScanLine =  (ModeData->BytesPerScanLine * 8) / ModeData->BitsPerPixel;
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Worker function to set video mode.
-
-  @param  BiosVideoPrivate       Instance of BIOS_VIDEO_DEV.
-  @param  ModeData               The mode data to be set.
-  @param  DevicePath             Pointer to Device Path Protocol.
-
-  @retval EFI_SUCCESS            Graphics mode was changed.
-  @retval EFI_DEVICE_ERROR       The device had an error and could not complete the
-                                 request.
-  @retval EFI_UNSUPPORTED        ModeNumber is not supported by this device.
-
-**/
-EFI_STATUS
-BiosVideoSetModeWorker (
-  IN  BIOS_VIDEO_DEV            *BiosVideoPrivate,
-  IN  BIOS_VIDEO_MODE_DATA      *ModeData,
-  IN  EFI_DEVICE_PATH_PROTOCOL  *DevicePath
-  )
-{
-  EFI_STATUS             Status;
-  EFI_IA32_REGISTER_SET  Regs;
-
-  if (BiosVideoPrivate->LineBuffer != NULL) {
-    FreePool (BiosVideoPrivate->LineBuffer);
-  }
-
-  if (BiosVideoPrivate->VgaFrameBuffer != NULL) {
-    FreePool (BiosVideoPrivate->VgaFrameBuffer);
-  }
-
-  if (BiosVideoPrivate->VbeFrameBuffer != NULL) {
-    FreePool (BiosVideoPrivate->VbeFrameBuffer);
-  }
-
-  BiosVideoPrivate->LineBuffer = (UINT8 *)AllocatePool (
-                                            ModeData->BytesPerScanLine
-                                            );
-  if (NULL == BiosVideoPrivate->LineBuffer) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  //
-  // Clear all registers
-  //
-  ZeroMem (&Regs, sizeof (Regs));
-
-  if (ModeData->VbeModeNumber < 0x100) {
-    //
-    // Allocate a working buffer for BLT operations to the VGA frame buffer
-    //
-    BiosVideoPrivate->VgaFrameBuffer = (UINT8 *)AllocatePool (4 * 480 * 80);
-    if (NULL == BiosVideoPrivate->VgaFrameBuffer) {
-      return EFI_OUT_OF_RESOURCES;
-    }
-
-    //
-    // Set VGA Mode
-    //
-    Regs.X.AX = ModeData->VbeModeNumber;
-    BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-  } else {
-    //
-    // Allocate a working buffer for BLT operations to the VBE frame buffer
-    //
-    BiosVideoPrivate->VbeFrameBuffer =
-      (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)AllocatePool (
-                                         ModeData->BytesPerScanLine * ModeData->VerticalResolution
-                                         );
-    if (NULL == BiosVideoPrivate->VbeFrameBuffer) {
-      return EFI_OUT_OF_RESOURCES;
-    }
-
-    //
-    // Set VBE mode
-    //
-    Regs.X.AX = VESA_BIOS_EXTENSIONS_SET_MODE;
-    Regs.X.BX = (UINT16)(ModeData->VbeModeNumber | VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER);
-    ZeroMem (BiosVideoPrivate->VbeCrtcInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK));
-    Regs.X.ES = EFI_SEGMENT ((UINTN)BiosVideoPrivate->VbeCrtcInformationBlock);
-    Regs.X.DI = EFI_OFFSET ((UINTN)BiosVideoPrivate->VbeCrtcInformationBlock);
-    BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-    //
-    // Check to see if the call succeeded
-    //
-    if (Regs.X.AX != VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) {
-      REPORT_STATUS_CODE_WITH_DEVICE_PATH (
-        EFI_ERROR_CODE | EFI_ERROR_MINOR,
-        EFI_PERIPHERAL_LOCAL_CONSOLE | EFI_P_EC_OUTPUT_ERROR,
-        DevicePath
-        );
-      return EFI_DEVICE_ERROR;
-    }
-
-    //
-    // Initialize the state of the VbeFrameBuffer
-    //
-    Status = BiosVideoPrivate->PciIo->Mem.Read (
-                                            BiosVideoPrivate->PciIo,
-                                            EfiPciIoWidthUint32,
-                                            EFI_PCI_IO_PASS_THROUGH_BAR,
-                                            (UINT64)(UINTN)ModeData->LinearFrameBuffer,
-                                            (ModeData->BytesPerScanLine * ModeData->VerticalResolution) >> 2,
-                                            BiosVideoPrivate->VbeFrameBuffer
-                                            );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Graphics Output protocol interface to set video mode.
-
-  @param  This                   Protocol instance pointer.
-  @param  ModeNumber             The mode number to be set.
-
-  @retval EFI_SUCCESS            Graphics mode was changed.
-  @retval EFI_DEVICE_ERROR       The device had an error and could not complete the
-                                 request.
-  @retval EFI_UNSUPPORTED        ModeNumber is not supported by this device.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputSetMode (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL  *This,
-  IN  UINT32                        ModeNumber
-  )
-{
-  EFI_STATUS                     Status;
-  BIOS_VIDEO_DEV                 *BiosVideoPrivate;
-  BIOS_VIDEO_MODE_DATA           *ModeData;
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  Background;
-
-  if (This == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This);
-
-  ModeData = &BiosVideoPrivate->ModeData[ModeNumber];
-
-  if (ModeNumber >= This->Mode->MaxMode) {
-    return EFI_UNSUPPORTED;
-  }
-
-  if (ModeNumber == This->Mode->Mode) {
-    //
-    // Clear screen to black
-    //
-    ZeroMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
-    BiosVideoGraphicsOutputVbeBlt (
-      This,
-      &Background,
-      EfiBltVideoFill,
-      0,
-      0,
-      0,
-      0,
-      ModeData->HorizontalResolution,
-      ModeData->VerticalResolution,
-      0
-      );
-    return EFI_SUCCESS;
-  }
-
-  Status = BiosVideoSetModeWorker (BiosVideoPrivate, ModeData, BiosVideoPrivate->GopDevicePath);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  This->Mode->Mode                       = ModeNumber;
-  This->Mode->Info->Version              = 0;
-  This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution;
-  This->Mode->Info->VerticalResolution   = ModeData->VerticalResolution;
-  This->Mode->Info->PixelFormat          = ModeData->PixelFormat;
-  CopyMem (&(This->Mode->Info->PixelInformation), &(ModeData->PixelBitMask), sizeof (ModeData->PixelBitMask));
-  This->Mode->Info->PixelsPerScanLine =  (ModeData->BytesPerScanLine * 8) / ModeData->BitsPerPixel;
-  This->Mode->SizeOfInfo              = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
-  This->Mode->FrameBufferSize         = ModeData->FrameBufferSize;
-  This->Mode->FrameBufferBase         = (EFI_PHYSICAL_ADDRESS)(UINTN)ModeData->LinearFrameBuffer;
-
-  BiosVideoPrivate->HardwareNeedsStarting = FALSE;
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Update physical frame buffer, copy 4 bytes block, then copy remaining bytes.
-
-  @param   PciIo              The pointer of EFI_PCI_IO_PROTOCOL
-  @param   VbeBuffer          The data to transfer to screen
-  @param   MemAddress         Physical frame buffer base address
-  @param   DestinationX       The X coordinate of the destination for BltOperation
-  @param   DestinationY       The Y coordinate of the destination for BltOperation
-  @param   TotalBytes         The total bytes of copy
-  @param   VbePixelWidth      Bytes per pixel
-  @param   BytesPerScanLine   Bytes per scan line
-
-**/
-VOID
-CopyVideoBuffer (
-  IN  EFI_PCI_IO_PROTOCOL  *PciIo,
-  IN  UINT8                *VbeBuffer,
-  IN  VOID                 *MemAddress,
-  IN  UINTN                DestinationX,
-  IN  UINTN                DestinationY,
-  IN  UINTN                TotalBytes,
-  IN  UINT32               VbePixelWidth,
-  IN  UINTN                BytesPerScanLine
-  )
-{
-  UINTN       FrameBufferAddr;
-  UINTN       CopyBlockNum;
-  UINTN       RemainingBytes;
-  UINTN       UnalignedBytes;
-  EFI_STATUS  Status;
-
-  FrameBufferAddr = (UINTN)MemAddress + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth;
-
-  //
-  // If TotalBytes is less than 4 bytes, only start byte copy.
-  //
-  if (TotalBytes < 4) {
-    Status = PciIo->Mem.Write (
-                          PciIo,
-                          EfiPciIoWidthUint8,
-                          EFI_PCI_IO_PASS_THROUGH_BAR,
-                          (UINT64)FrameBufferAddr,
-                          TotalBytes,
-                          VbeBuffer
-                          );
-    ASSERT_EFI_ERROR (Status);
-    return;
-  }
-
-  //
-  // If VbeBuffer is not 4-byte aligned, start byte copy.
-  //
-  UnalignedBytes = (4 - ((UINTN)VbeBuffer & 0x3)) & 0x3;
-
-  if (UnalignedBytes != 0) {
-    Status = PciIo->Mem.Write (
-                          PciIo,
-                          EfiPciIoWidthUint8,
-                          EFI_PCI_IO_PASS_THROUGH_BAR,
-                          (UINT64)FrameBufferAddr,
-                          UnalignedBytes,
-                          VbeBuffer
-                          );
-    ASSERT_EFI_ERROR (Status);
-    FrameBufferAddr += UnalignedBytes;
-    VbeBuffer       += UnalignedBytes;
-  }
-
-  //
-  // Calculate 4-byte block count and remaining bytes.
-  //
-  CopyBlockNum   = (TotalBytes - UnalignedBytes) >> 2;
-  RemainingBytes = (TotalBytes - UnalignedBytes) &  3;
-
-  //
-  // Copy 4-byte block and remaining bytes to physical frame buffer.
-  //
-  if (CopyBlockNum != 0) {
-    Status = PciIo->Mem.Write (
-                          PciIo,
-                          EfiPciIoWidthUint32,
-                          EFI_PCI_IO_PASS_THROUGH_BAR,
-                          (UINT64)FrameBufferAddr,
-                          CopyBlockNum,
-                          VbeBuffer
-                          );
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  if (RemainingBytes != 0) {
-    FrameBufferAddr += (CopyBlockNum << 2);
-    VbeBuffer       += (CopyBlockNum << 2);
-    Status           = PciIo->Mem.Write (
-                                    PciIo,
-                                    EfiPciIoWidthUint8,
-                                    EFI_PCI_IO_PASS_THROUGH_BAR,
-                                    (UINT64)FrameBufferAddr,
-                                    RemainingBytes,
-                                    VbeBuffer
-                                    );
-    ASSERT_EFI_ERROR (Status);
-  }
-}
-
-/**
-  Worker function to block transfer for VBE device.
-
-  @param  BiosVideoPrivate       Instance of BIOS_VIDEO_DEV
-  @param  BltBuffer              The data to transfer to screen
-  @param  BltOperation           The operation to perform
-  @param  SourceX                The X coordinate of the source for BltOperation
-  @param  SourceY                The Y coordinate of the source for BltOperation
-  @param  DestinationX           The X coordinate of the destination for
-                                 BltOperation
-  @param  DestinationY           The Y coordinate of the destination for
-                                 BltOperation
-  @param  Width                  The width of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Height                 The height of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Delta                  Not used for EfiBltVideoFill and
-                                 EfiBltVideoToVideo operation. If a Delta of 0 is
-                                 used, the entire BltBuffer will be operated on. If
-                                 a subrectangle of the BltBuffer is used, then
-                                 Delta represents the number of bytes in a row of
-                                 the BltBuffer.
-  @param  Mode                   Mode data.
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter passed in
-  @retval EFI_SUCCESS            Blt operation success
-
-**/
-EFI_STATUS
-BiosVideoVbeBltWorker (
-  IN  BIOS_VIDEO_DEV                     *BiosVideoPrivate,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL      *BltBuffer  OPTIONAL,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION  BltOperation,
-  IN  UINTN                              SourceX,
-  IN  UINTN                              SourceY,
-  IN  UINTN                              DestinationX,
-  IN  UINTN                              DestinationY,
-  IN  UINTN                              Width,
-  IN  UINTN                              Height,
-  IN  UINTN                              Delta,
-  IN  BIOS_VIDEO_MODE_DATA               *Mode
-  )
-{
-  EFI_PCI_IO_PROTOCOL            *PciIo;
-  EFI_TPL                        OriginalTPL;
-  UINTN                          DstY;
-  UINTN                          SrcY;
-  UINTN                          DstX;
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  *Blt;
-  VOID                           *MemAddress;
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  *VbeFrameBuffer;
-  UINTN                          BytesPerScanLine;
-  UINTN                          Index;
-  UINT8                          *VbeBuffer;
-  UINT8                          *VbeBuffer1;
-  UINT8                          *BltUint8;
-  UINT32                         VbePixelWidth;
-  UINT32                         Pixel;
-  UINTN                          TotalBytes;
-
-  PciIo = BiosVideoPrivate->PciIo;
-
-  VbeFrameBuffer   = BiosVideoPrivate->VbeFrameBuffer;
-  MemAddress       = Mode->LinearFrameBuffer;
-  BytesPerScanLine = Mode->BytesPerScanLine;
-  VbePixelWidth    = Mode->BitsPerPixel / 8;
-  BltUint8         = (UINT8 *)BltBuffer;
-  TotalBytes       = Width * VbePixelWidth;
-
-  if (((UINTN)BltOperation) >= EfiGraphicsOutputBltOperationMax) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if ((Width == 0) || (Height == 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // We need to fill the Virtual Screen buffer with the blt data.
-  // The virtual screen is upside down, as the first row is the bootom row of
-  // the image.
-  //
-  if (BltOperation == EfiBltVideoToBltBuffer) {
-    //
-    // Video to BltBuffer: Source is Video, destination is BltBuffer
-    //
-    if (SourceY + Height > Mode->VerticalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-
-    if (SourceX + Width > Mode->HorizontalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-  } else {
-    //
-    // BltBuffer to Video: Source is BltBuffer, destination is Video
-    //
-    if (DestinationY + Height > Mode->VerticalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-
-    if (DestinationX + Width > Mode->HorizontalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-  }
-
-  //
-  // If Delta is zero, then the entire BltBuffer is being used, so Delta
-  // is the number of bytes in each row of BltBuffer.  Since BltBuffer is Width pixels size,
-  // the number of bytes in each row can be computed.
-  //
-  if (Delta == 0) {
-    Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
-  }
-
-  //
-  // We have to raise to TPL Notify, so we make an atomic write the frame buffer.
-  // We would not want a timer based event (Cursor, ...) to come in while we are
-  // doing this operation.
-  //
-  OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY);
-
-  switch (BltOperation) {
-    case EfiBltVideoToBltBuffer:
-      for (SrcY = SourceY, DstY = DestinationY; DstY < (Height + DestinationY); SrcY++, DstY++) {
-        Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)(BltUint8 + DstY * Delta + DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
-        //
-        // Shuffle the packed bytes in the hardware buffer to match EFI_GRAPHICS_OUTPUT_BLT_PIXEL
-        //
-        VbeBuffer = ((UINT8 *)VbeFrameBuffer + (SrcY * BytesPerScanLine + SourceX * VbePixelWidth));
-        for (DstX = DestinationX; DstX < (Width + DestinationX); DstX++) {
-          Pixel         = VbeBuffer[0] | VbeBuffer[1] << 8 | VbeBuffer[2] << 16 | VbeBuffer[3] << 24;
-          Blt->Red      = (UINT8)((Pixel >> Mode->Red.Position) & Mode->Red.Mask);
-          Blt->Blue     = (UINT8)((Pixel >> Mode->Blue.Position) & Mode->Blue.Mask);
-          Blt->Green    = (UINT8)((Pixel >> Mode->Green.Position) & Mode->Green.Mask);
-          Blt->Reserved = 0;
-          Blt++;
-          VbeBuffer += VbePixelWidth;
-        }
-      }
-
-      break;
-
-    case EfiBltVideoToVideo:
-      for (Index = 0; Index < Height; Index++) {
-        if (DestinationY <= SourceY) {
-          SrcY = SourceY + Index;
-          DstY = DestinationY + Index;
-        } else {
-          SrcY = SourceY + Height - Index - 1;
-          DstY = DestinationY + Height - Index - 1;
-        }
-
-        VbeBuffer  = ((UINT8 *)VbeFrameBuffer + DstY * BytesPerScanLine + DestinationX * VbePixelWidth);
-        VbeBuffer1 = ((UINT8 *)VbeFrameBuffer + SrcY * BytesPerScanLine + SourceX * VbePixelWidth);
-
-        gBS->CopyMem (
-               VbeBuffer,
-               VbeBuffer1,
-               TotalBytes
-               );
-
-        //
-        // Update physical frame buffer.
-        //
-        CopyVideoBuffer (
-          PciIo,
-          VbeBuffer,
-          MemAddress,
-          DestinationX,
-          DstY,
-          TotalBytes,
-          VbePixelWidth,
-          BytesPerScanLine
-          );
-      }
-
-      break;
-
-    case EfiBltVideoFill:
-      VbeBuffer = (UINT8 *)((UINTN)VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth);
-      Blt       = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)BltUint8;
-      //
-      // Shuffle the RGB fields in EFI_GRAPHICS_OUTPUT_BLT_PIXEL to match the hardware buffer
-      //
-      Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) |
-              (
-               (Blt->Green & Mode->Green.Mask) <<
-               Mode->Green.Position
-              ) |
-              ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position);
-
-      for (Index = 0; Index < Width; Index++) {
-        gBS->CopyMem (
-               VbeBuffer,
-               &Pixel,
-               VbePixelWidth
-               );
-        VbeBuffer += VbePixelWidth;
-      }
-
-      VbeBuffer = (UINT8 *)((UINTN)VbeFrameBuffer + (DestinationY * BytesPerScanLine) + DestinationX * VbePixelWidth);
-      for (DstY = DestinationY + 1; DstY < (Height + DestinationY); DstY++) {
-        gBS->CopyMem (
-               (VOID *)((UINTN)VbeFrameBuffer + (DstY * BytesPerScanLine) + DestinationX * VbePixelWidth),
-               VbeBuffer,
-               TotalBytes
-               );
-      }
-
-      for (DstY = DestinationY; DstY < (Height + DestinationY); DstY++) {
-        //
-        // Update physical frame buffer.
-        //
-        CopyVideoBuffer (
-          PciIo,
-          VbeBuffer,
-          MemAddress,
-          DestinationX,
-          DstY,
-          TotalBytes,
-          VbePixelWidth,
-          BytesPerScanLine
-          );
-      }
-
-      break;
-
-    case EfiBltBufferToVideo:
-      for (SrcY = SourceY, DstY = DestinationY; SrcY < (Height + SourceY); SrcY++, DstY++) {
-        Blt       = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)(BltUint8 + (SrcY * Delta) + (SourceX) * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
-        VbeBuffer = ((UINT8 *)VbeFrameBuffer + (DstY * BytesPerScanLine + DestinationX * VbePixelWidth));
-        for (DstX = DestinationX; DstX < (Width + DestinationX); DstX++) {
-          //
-          // Shuffle the RGB fields in EFI_GRAPHICS_OUTPUT_BLT_PIXEL to match the hardware buffer
-          //
-          Pixel = ((Blt->Red & Mode->Red.Mask) << Mode->Red.Position) |
-                  ((Blt->Green & Mode->Green.Mask) << Mode->Green.Position) |
-                  ((Blt->Blue & Mode->Blue.Mask) << Mode->Blue.Position);
-          gBS->CopyMem (
-                 VbeBuffer,
-                 &Pixel,
-                 VbePixelWidth
-                 );
-          Blt++;
-          VbeBuffer += VbePixelWidth;
-        }
-
-        VbeBuffer = ((UINT8 *)VbeFrameBuffer + (DstY * BytesPerScanLine + DestinationX * VbePixelWidth));
-
-        //
-        // Update physical frame buffer.
-        //
-        CopyVideoBuffer (
-          PciIo,
-          VbeBuffer,
-          MemAddress,
-          DestinationX,
-          DstY,
-          TotalBytes,
-          VbePixelWidth,
-          BytesPerScanLine
-          );
-      }
-
-      break;
-
-    default:;
-  }
-
-  gBS->RestoreTPL (OriginalTPL);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Graphics Output protocol instance to block transfer for VBE device.
-
-  @param  This                   Pointer to Graphics Output protocol instance
-  @param  BltBuffer              The data to transfer to screen
-  @param  BltOperation           The operation to perform
-  @param  SourceX                The X coordinate of the source for BltOperation
-  @param  SourceY                The Y coordinate of the source for BltOperation
-  @param  DestinationX           The X coordinate of the destination for
-                                 BltOperation
-  @param  DestinationY           The Y coordinate of the destination for
-                                 BltOperation
-  @param  Width                  The width of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Height                 The height of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Delta                  Not used for EfiBltVideoFill and
-                                 EfiBltVideoToVideo operation. If a Delta of 0 is
-                                 used, the entire BltBuffer will be operated on. If
-                                 a subrectangle of the BltBuffer is used, then
-                                 Delta represents the number of bytes in a row of
-                                 the BltBuffer.
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter passed in
-  @retval EFI_SUCCESS            Blt operation success
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputVbeBlt (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL       *This,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL      *BltBuffer  OPTIONAL,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION  BltOperation,
-  IN  UINTN                              SourceX,
-  IN  UINTN                              SourceY,
-  IN  UINTN                              DestinationX,
-  IN  UINTN                              DestinationY,
-  IN  UINTN                              Width,
-  IN  UINTN                              Height,
-  IN  UINTN                              Delta
-  )
-{
-  BIOS_VIDEO_DEV        *BiosVideoPrivate;
-  BIOS_VIDEO_MODE_DATA  *Mode;
-
-  if (This == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This);
-  Mode             = &BiosVideoPrivate->ModeData[This->Mode->Mode];
-
-  return BiosVideoVbeBltWorker (
-           BiosVideoPrivate,
-           BltBuffer,
-           BltOperation,
-           SourceX,
-           SourceY,
-           DestinationX,
-           DestinationY,
-           Width,
-           Height,
-           Delta,
-           Mode
-           );
-}
-
-/**
-  Write graphics controller registers.
-
-  @param  PciIo                  Pointer to PciIo protocol instance of the
-                                 controller
-  @param  Address                Register address
-  @param  Data                   Data to be written to register
-
-  @return None
-
-**/
-VOID
-WriteGraphicsController (
-  IN  EFI_PCI_IO_PROTOCOL  *PciIo,
-  IN  UINTN                Address,
-  IN  UINTN                Data
-  )
-{
-  Address = Address | (Data << 8);
-  PciIo->Io.Write (
-              PciIo,
-              EfiPciIoWidthUint16,
-              EFI_PCI_IO_PASS_THROUGH_BAR,
-              VGA_GRAPHICS_CONTROLLER_ADDRESS_REGISTER,
-              1,
-              &Address
-              );
-}
-
-/**
-  Read the four bit plane of VGA frame buffer.
-
-  @param  PciIo                  Pointer to PciIo protocol instance of the
-                                 controller
-  @param  HardwareBuffer         Hardware VGA frame buffer address
-  @param  MemoryBuffer           Memory buffer address
-  @param  WidthInBytes           Number of bytes in a line to read
-  @param  Height                 Height of the area to read
-
-  @return None
-
-**/
-VOID
-VgaReadBitPlanes (
-  EFI_PCI_IO_PROTOCOL  *PciIo,
-  UINT8                *HardwareBuffer,
-  UINT8                *MemoryBuffer,
-  UINTN                WidthInBytes,
-  UINTN                Height
-  )
-{
-  UINTN  BitPlane;
-  UINTN  Rows;
-  UINTN  FrameBufferOffset;
-  UINT8  *Source;
-  UINT8  *Destination;
-
-  //
-  // Program the Mode Register Write mode 0, Read mode 0
-  //
-  WriteGraphicsController (
-    PciIo,
-    VGA_GRAPHICS_CONTROLLER_MODE_REGISTER,
-    VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_0
-    );
-
-  for (BitPlane = 0, FrameBufferOffset = 0;
-       BitPlane < VGA_NUMBER_OF_BIT_PLANES;
-       BitPlane++, FrameBufferOffset += VGA_BYTES_PER_BIT_PLANE
-       )
-  {
-    //
-    // Program the Read Map Select Register to select the correct bit plane
-    //
-    WriteGraphicsController (
-      PciIo,
-      VGA_GRAPHICS_CONTROLLER_READ_MAP_SELECT_REGISTER,
-      BitPlane
-      );
-
-    Source      = HardwareBuffer;
-    Destination = MemoryBuffer + FrameBufferOffset;
-
-    for (Rows = 0; Rows < Height; Rows++, Source += VGA_BYTES_PER_SCAN_LINE, Destination += VGA_BYTES_PER_SCAN_LINE) {
-      PciIo->Mem.Read (
-                   PciIo,
-                   EfiPciIoWidthUint8,
-                   EFI_PCI_IO_PASS_THROUGH_BAR,
-                   (UINT64)(UINTN)Source,
-                   WidthInBytes,
-                   (VOID *)Destination
-                   );
-    }
-  }
-}
-
-/**
-  Internal routine to convert VGA color to Grahpics Output color.
-
-  @param  MemoryBuffer           Buffer containing VGA color
-  @param  CoordinateX            The X coordinate of pixel on screen
-  @param  CoordinateY            The Y coordinate of pixel on screen
-  @param  BltBuffer              Buffer to contain converted Grahpics Output color
-
-  @return None
-
-**/
-VOID
-VgaConvertToGraphicsOutputColor (
-  UINT8                          *MemoryBuffer,
-  UINTN                          CoordinateX,
-  UINTN                          CoordinateY,
-  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  *BltBuffer
-  )
-{
-  UINTN  Mask;
-  UINTN  Bit;
-  UINTN  Color;
-
-  MemoryBuffer += ((CoordinateY << 6) + (CoordinateY << 4) + (CoordinateX >> 3));
-  Mask          = mVgaBitMaskTable[CoordinateX & 0x07];
-  for (Bit = 0x01, Color = 0; Bit < 0x10; Bit <<= 1, MemoryBuffer += VGA_BYTES_PER_BIT_PLANE) {
-    if ((*MemoryBuffer & Mask) != 0) {
-      Color |= Bit;
-    }
-  }
-
-  *BltBuffer = mVgaColorToGraphicsOutputColor[Color];
-}
-
-/**
-  Internal routine to convert Grahpics Output color to VGA color.
-
-  @param  BltBuffer              buffer containing Grahpics Output color
-
-  @return Converted VGA color
-
-**/
-UINT8
-VgaConvertColor (
-  IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL  *BltBuffer
-  )
-{
-  UINT8  Color;
-
-  Color = (UINT8)((BltBuffer->Blue >> 7) | ((BltBuffer->Green >> 6) & 0x02) | ((BltBuffer->Red >> 5) & 0x04));
-  if ((BltBuffer->Red + BltBuffer->Green + BltBuffer->Blue) > 0x180) {
-    Color |= 0x08;
-  }
-
-  return Color;
-}
-
-/**
-  Grahpics Output protocol instance to block transfer for VGA device.
-
-  @param  This                   Pointer to Grahpics Output protocol instance
-  @param  BltBuffer              The data to transfer to screen
-  @param  BltOperation           The operation to perform
-  @param  SourceX                The X coordinate of the source for BltOperation
-  @param  SourceY                The Y coordinate of the source for BltOperation
-  @param  DestinationX           The X coordinate of the destination for
-                                 BltOperation
-  @param  DestinationY           The Y coordinate of the destination for
-                                 BltOperation
-  @param  Width                  The width of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Height                 The height of a rectangle in the blt rectangle in
-                                 pixels
-  @param  Delta                  Not used for EfiBltVideoFill and
-                                 EfiBltVideoToVideo operation. If a Delta of 0 is
-                                 used, the entire BltBuffer will be operated on. If
-                                 a subrectangle of the BltBuffer is used, then
-                                 Delta represents the number of bytes in a row of
-                                 the BltBuffer.
-
-  @retval EFI_INVALID_PARAMETER  Invalid parameter passed in
-  @retval EFI_SUCCESS            Blt operation success
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoGraphicsOutputVgaBlt (
-  IN  EFI_GRAPHICS_OUTPUT_PROTOCOL       *This,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL      *BltBuffer  OPTIONAL,
-  IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION  BltOperation,
-  IN  UINTN                              SourceX,
-  IN  UINTN                              SourceY,
-  IN  UINTN                              DestinationX,
-  IN  UINTN                              DestinationY,
-  IN  UINTN                              Width,
-  IN  UINTN                              Height,
-  IN  UINTN                              Delta
-  )
-{
-  BIOS_VIDEO_DEV       *BiosVideoPrivate;
-  EFI_TPL              OriginalTPL;
-  UINT8                *MemAddress;
-  UINTN                BytesPerScanLine;
-  UINTN                Bit;
-  UINTN                Index;
-  UINTN                Index1;
-  UINTN                StartAddress;
-  UINTN                Bytes;
-  UINTN                Offset;
-  UINT8                LeftMask;
-  UINT8                RightMask;
-  UINTN                Address;
-  UINTN                AddressFix;
-  UINT8                *Address1;
-  UINT8                *SourceAddress;
-  UINT8                *DestinationAddress;
-  EFI_PCI_IO_PROTOCOL  *PciIo;
-  UINT8                Data;
-  UINT8                PixelColor;
-  UINT8                *VgaFrameBuffer;
-  UINTN                SourceOffset;
-  UINTN                SourceWidth;
-  UINTN                Rows;
-  UINTN                Columns;
-  UINTN                CoordinateX;
-  UINTN                CoordinateY;
-  UINTN                CurrentMode;
-
-  if ((This == NULL) || (((UINTN)BltOperation) >= EfiGraphicsOutputBltOperationMax)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This);
-
-  CurrentMode      = This->Mode->Mode;
-  PciIo            = BiosVideoPrivate->PciIo;
-  MemAddress       = BiosVideoPrivate->ModeData[CurrentMode].LinearFrameBuffer;
-  BytesPerScanLine = BiosVideoPrivate->ModeData[CurrentMode].BytesPerScanLine >> 3;
-  VgaFrameBuffer   = BiosVideoPrivate->VgaFrameBuffer;
-
-  if ((Width == 0) || (Height == 0)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // We need to fill the Virtual Screen buffer with the blt data.
-  // The virtual screen is upside down, as the first row is the bootom row of
-  // the image.
-  //
-  if (BltOperation == EfiBltVideoToBltBuffer) {
-    //
-    // Video to BltBuffer: Source is Video, destination is BltBuffer
-    //
-    if (SourceY + Height > BiosVideoPrivate->ModeData[CurrentMode].VerticalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-
-    if (SourceX + Width > BiosVideoPrivate->ModeData[CurrentMode].HorizontalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-  } else {
-    //
-    // BltBuffer to Video: Source is BltBuffer, destination is Video
-    //
-    if (DestinationY + Height > BiosVideoPrivate->ModeData[CurrentMode].VerticalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-
-    if (DestinationX + Width > BiosVideoPrivate->ModeData[CurrentMode].HorizontalResolution) {
-      return EFI_INVALID_PARAMETER;
-    }
-  }
-
-  //
-  // If Delta is zero, then the entire BltBuffer is being used, so Delta
-  // is the number of bytes in each row of BltBuffer.  Since BltBuffer is Width pixels size,
-  // the number of bytes in each row can be computed.
-  //
-  if (Delta == 0) {
-    Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
-  }
-
-  //
-  // We have to raise to TPL Notify, so we make an atomic write the frame buffer.
-  // We would not want a timer based event (Cursor, ...) to come in while we are
-  // doing this operation.
-  //
-  OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY);
-
-  //
-  // Compute some values we need for VGA
-  //
-  switch (BltOperation) {
-    case EfiBltVideoToBltBuffer:
-
-      SourceOffset = (SourceY << 6) + (SourceY << 4) + (SourceX >> 3);
-      SourceWidth  = ((SourceX + Width - 1) >> 3) - (SourceX >> 3) + 1;
-
-      //
-      // Read all the pixels in the 4 bit planes into a memory buffer that looks like the VGA buffer
-      //
-      VgaReadBitPlanes (
-        PciIo,
-        MemAddress + SourceOffset,
-        VgaFrameBuffer + SourceOffset,
-        SourceWidth,
-        Height
-        );
-
-      //
-      // Convert VGA Bit Planes to a Graphics Output 32-bit color value
-      //
-      BltBuffer += (DestinationY * (Delta >> 2) + DestinationX);
-      for (Rows = 0, CoordinateY = SourceY; Rows < Height; Rows++, CoordinateY++, BltBuffer += (Delta >> 2)) {
-        for (Columns = 0, CoordinateX = SourceX; Columns < Width; Columns++, CoordinateX++, BltBuffer++) {
-          VgaConvertToGraphicsOutputColor (VgaFrameBuffer, CoordinateX, CoordinateY, BltBuffer);
-        }
-
-        BltBuffer -= Width;
-      }
-
-      break;
-
-    case EfiBltVideoToVideo:
-      //
-      // Check for an aligned Video to Video operation
-      //
-      if (((SourceX & 0x07) == 0x00) && ((DestinationX & 0x07) == 0x00) && ((Width & 0x07) == 0x00)) {
-        //
-        // Program the Mode Register Write mode 1, Read mode 0
-        //
-        WriteGraphicsController (
-          PciIo,
-          VGA_GRAPHICS_CONTROLLER_MODE_REGISTER,
-          VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_1
-          );
-
-        SourceAddress      = (UINT8 *)(MemAddress + (SourceY << 6) + (SourceY << 4) + (SourceX >> 3));
-        DestinationAddress = (UINT8 *)(MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3));
-        Bytes              = Width >> 3;
-        for (Index = 0, Offset = 0; Index < Height; Index++, Offset += BytesPerScanLine) {
-          PciIo->CopyMem (
-                   PciIo,
-                   EfiPciIoWidthUint8,
-                   EFI_PCI_IO_PASS_THROUGH_BAR,
-                   (UINT64)(UINTN)(DestinationAddress + Offset),
-                   EFI_PCI_IO_PASS_THROUGH_BAR,
-                   (UINT64)(UINTN)(SourceAddress + Offset),
-                   Bytes
-                   );
-        }
-      } else {
-        SourceOffset = (SourceY << 6) + (SourceY << 4) + (SourceX >> 3);
-        SourceWidth  = ((SourceX + Width - 1) >> 3) - (SourceX >> 3) + 1;
-
-        //
-        // Read all the pixels in the 4 bit planes into a memory buffer that looks like the VGA buffer
-        //
-        VgaReadBitPlanes (
-          PciIo,
-          MemAddress + SourceOffset,
-          VgaFrameBuffer + SourceOffset,
-          SourceWidth,
-          Height
-          );
-      }
-
-      break;
-
-    case EfiBltVideoFill:
-      StartAddress = (UINTN)(MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3));
-      Bytes        = ((DestinationX + Width - 1) >> 3) - (DestinationX >> 3);
-      LeftMask     = mVgaLeftMaskTable[DestinationX & 0x07];
-      RightMask    = mVgaRightMaskTable[(DestinationX + Width - 1) & 0x07];
-      if (Bytes == 0) {
-        LeftMask  = (UINT8)(LeftMask & RightMask);
-        RightMask = 0;
-      }
-
-      if (LeftMask == 0xff) {
-        StartAddress--;
-        Bytes++;
-        LeftMask = 0;
-      }
-
-      if (RightMask == 0xff) {
-        Bytes++;
-        RightMask = 0;
-      }
-
-      PixelColor = VgaConvertColor (BltBuffer);
-
-      //
-      // Program the Mode Register Write mode 2, Read mode 0
-      //
-      WriteGraphicsController (
-        PciIo,
-        VGA_GRAPHICS_CONTROLLER_MODE_REGISTER,
-        VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2
-        );
-
-      //
-      // Program the Data Rotate/Function Select Register to replace
-      //
-      WriteGraphicsController (
-        PciIo,
-        VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER,
-        VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE
-        );
-
-      if (LeftMask != 0) {
-        //
-        // Program the BitMask register with the Left column mask
-        //
-        WriteGraphicsController (
-          PciIo,
-          VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER,
-          LeftMask
-          );
-
-        for (Index = 0, Address = StartAddress; Index < Height; Index++, Address += BytesPerScanLine) {
-          //
-          // Read data from the bit planes into the latches
-          //
-          PciIo->Mem.Read (
-                       PciIo,
-                       EfiPciIoWidthUint8,
-                       EFI_PCI_IO_PASS_THROUGH_BAR,
-                       (UINT64)(UINTN)Address,
-                       1,
-                       &Data
-                       );
-          //
-          // Write the lower 4 bits of PixelColor to the bit planes in the pixels enabled by BitMask
-          //
-          PciIo->Mem.Write (
-                       PciIo,
-                       EfiPciIoWidthUint8,
-                       EFI_PCI_IO_PASS_THROUGH_BAR,
-                       (UINT64)(UINTN)Address,
-                       1,
-                       &PixelColor
-                       );
-        }
-      }
-
-      if (Bytes > 1) {
-        //
-        // Program the BitMask register with the middle column mask of 0xff
-        //
-        WriteGraphicsController (
-          PciIo,
-          VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER,
-          0xff
-          );
-
-        for (Index = 0, Address = StartAddress + 1; Index < Height; Index++, Address += BytesPerScanLine) {
-          PciIo->Mem.Write (
-                       PciIo,
-                       EfiPciIoWidthFillUint8,
-                       EFI_PCI_IO_PASS_THROUGH_BAR,
-                       (UINT64)(UINTN)Address,
-                       Bytes - 1,
-                       &PixelColor
-                       );
-        }
-      }
-
-      if (RightMask != 0) {
-        //
-        // Program the BitMask register with the Right column mask
-        //
-        WriteGraphicsController (
-          PciIo,
-          VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER,
-          RightMask
-          );
-
-        for (Index = 0, Address = StartAddress + Bytes; Index < Height; Index++, Address += BytesPerScanLine) {
-          //
-          // Read data from the bit planes into the latches
-          //
-          PciIo->Mem.Read (
-                       PciIo,
-                       EfiPciIoWidthUint8,
-                       EFI_PCI_IO_PASS_THROUGH_BAR,
-                       (UINT64)(UINTN)Address,
-                       1,
-                       &Data
-                       );
-          //
-          // Write the lower 4 bits of PixelColor to the bit planes in the pixels enabled by BitMask
-          //
-          PciIo->Mem.Write (
-                       PciIo,
-                       EfiPciIoWidthUint8,
-                       EFI_PCI_IO_PASS_THROUGH_BAR,
-                       (UINT64)(UINTN)Address,
-                       1,
-                       &PixelColor
-                       );
-        }
-      }
-
-      break;
-
-    case EfiBltBufferToVideo:
-      StartAddress = (UINTN)(MemAddress + (DestinationY << 6) + (DestinationY << 4) + (DestinationX >> 3));
-      LeftMask     = mVgaBitMaskTable[DestinationX & 0x07];
-
-      //
-      // Program the Mode Register Write mode 2, Read mode 0
-      //
-      WriteGraphicsController (
-        PciIo,
-        VGA_GRAPHICS_CONTROLLER_MODE_REGISTER,
-        VGA_GRAPHICS_CONTROLLER_READ_MODE_0 | VGA_GRAPHICS_CONTROLLER_WRITE_MODE_2
-        );
-
-      //
-      // Program the Data Rotate/Function Select Register to replace
-      //
-      WriteGraphicsController (
-        PciIo,
-        VGA_GRAPHICS_CONTROLLER_DATA_ROTATE_REGISTER,
-        VGA_GRAPHICS_CONTROLLER_FUNCTION_REPLACE
-        );
-
-      for (Index = 0, Address = StartAddress; Index < Height; Index++, Address += BytesPerScanLine) {
-        for (Index1 = 0; Index1 < Width; Index1++) {
-          BiosVideoPrivate->LineBuffer[Index1] = VgaConvertColor (&BltBuffer[(SourceY + Index) * (Delta >> 2) + SourceX + Index1]);
-        }
-
-        AddressFix = Address;
-
-        for (Bit = 0; Bit < 8; Bit++) {
-          //
-          // Program the BitMask register with the Left column mask
-          //
-          WriteGraphicsController (
-            PciIo,
-            VGA_GRAPHICS_CONTROLLER_BIT_MASK_REGISTER,
-            LeftMask
-            );
-
-          for (Index1 = Bit, Address1 = (UINT8 *)AddressFix; Index1 < Width; Index1 += 8, Address1++) {
-            //
-            // Read data from the bit planes into the latches
-            //
-            PciIo->Mem.Read (
-                         PciIo,
-                         EfiPciIoWidthUint8,
-                         EFI_PCI_IO_PASS_THROUGH_BAR,
-                         (UINT64)(UINTN)Address1,
-                         1,
-                         &Data
-                         );
-
-            PciIo->Mem.Write (
-                         PciIo,
-                         EfiPciIoWidthUint8,
-                         EFI_PCI_IO_PASS_THROUGH_BAR,
-                         (UINT64)(UINTN)Address1,
-                         1,
-                         &BiosVideoPrivate->LineBuffer[Index1]
-                         );
-          }
-
-          LeftMask = (UINT8)(LeftMask >> 1);
-          if (LeftMask == 0) {
-            LeftMask = 0x80;
-            AddressFix++;
-          }
-        }
-      }
-
-      break;
-
-    default:;
-  }
-
-  gBS->RestoreTPL (OriginalTPL);
-
-  return EFI_SUCCESS;
-}
-
-//
-// VGA Mini Port Protocol Functions
-//
-
-/**
-  VgaMiniPort protocol interface to set mode.
-
-  @param  This                   Pointer to VgaMiniPort protocol instance
-  @param  ModeNumber             The index of the mode
-
-  @retval EFI_UNSUPPORTED        The requested mode is not supported
-  @retval EFI_SUCCESS            The requested mode is set successfully
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoVgaMiniPortSetMode (
-  IN  EFI_VGA_MINI_PORT_PROTOCOL  *This,
-  IN  UINTN                       ModeNumber
-  )
-{
-  BIOS_VIDEO_DEV         *BiosVideoPrivate;
-  EFI_IA32_REGISTER_SET  Regs;
-
-  if (This == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Make sure the ModeNumber is a valid value
-  //
-  if (ModeNumber >= This->MaxMode) {
-    return EFI_UNSUPPORTED;
-  }
-
-  //
-  // Get the device structure for this device
-  //
-  BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_VGA_MINI_PORT_THIS (This);
-
-  switch (ModeNumber) {
-    case 0:
-      //
-      // Set the 80x25 Text VGA Mode
-      //
-      Regs.H.AH = 0x00;
-      Regs.H.AL = 0x83;
-      BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-      Regs.H.AH = 0x11;
-      Regs.H.AL = 0x14;
-      Regs.H.BL = 0;
-      BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-      break;
-
-    case 1:
-      //
-      // Set the 80x50 Text VGA Mode
-      //
-      Regs.H.AH = 0x00;
-      Regs.H.AL = 0x83;
-      BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-      Regs.H.AH = 0x11;
-      Regs.H.AL = 0x12;
-      Regs.H.BL = 0;
-      BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-      break;
-
-    default:
-      return EFI_UNSUPPORTED;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Event handler for Exit Boot Service.
-
-  @param  Event       The event that be signalled when exiting boot service.
-  @param  Context     Pointer to instance of BIOS_VIDEO_DEV.
-
-**/
-VOID
-EFIAPI
-BiosVideoNotifyExitBootServices (
-  IN  EFI_EVENT  Event,
-  IN  VOID       *Context
-  )
-{
-  BIOS_VIDEO_DEV         *BiosVideoPrivate;
-  EFI_IA32_REGISTER_SET  Regs;
-
-  BiosVideoPrivate = (BIOS_VIDEO_DEV *)Context;
-
-  //
-  // Set the 80x25 Text VGA Mode
-  //
-  Regs.H.AH = 0x00;
-  Regs.H.AL = 0x03;
-  BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-  Regs.H.AH = 0x00;
-  Regs.H.AL = 0x83;
-  BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-
-  Regs.H.AH = 0x11;
-  Regs.H.AL = 0x04;
-  Regs.H.BL = 0;
-  BiosVideoPrivate->LegacyBios->Int86 (BiosVideoPrivate->LegacyBios, 0x10, &Regs);
-}
-
-/**
-  The user Entry Point for module UefiBiosVideo. The user code starts with this function.
-
-  @param[in] ImageHandle    The firmware allocated handle for the EFI image.
-  @param[in] SystemTable    A pointer to the EFI System Table.
-
-  @retval EFI_SUCCESS       The entry point is executed successfully.
-  @retval other             Some error occurs when executing this entry point.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoEntryPoint (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
-  )
-{
-  EFI_STATUS  Status;
-
-  //
-  // Install driver model protocol(s).
-  //
-  Status = EfiLibInstallDriverBindingComponentName2 (
-             ImageHandle,
-             SystemTable,
-             &gBiosVideoDriverBinding,
-             ImageHandle,
-             &gBiosVideoComponentName,
-             &gBiosVideoComponentName2
-             );
-  ASSERT_EFI_ERROR (Status);
-
-  //
-  // Install Legacy BIOS GUID to mark this driver as a BIOS Thunk Driver
-  //
-  return gBS->InstallMultipleProtocolInterfaces (
-                &ImageHandle,
-                &gEfiLegacyBiosGuid,
-                NULL,
-                NULL
-                );
-}
diff --git a/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c b/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c
deleted file mode 100644
index c401ed943b19..000000000000
--- a/OvmfPkg/Csm/BiosThunk/VideoDxe/ComponentName.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/** @file
-
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
-
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "BiosVideo.h"
-
-//
-// EFI Component Name Functions
-//
-
-/**
-  Retrieves a Unicode string that is the user readable name of the driver.
-
-  This function retrieves the user readable name of a driver in the form of a
-  Unicode string. If the driver specified by This has a user readable name in
-  the language specified by Language, then a pointer to the driver name is
-  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
-  by This does not support the language specified by Language,
-  then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language. This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified
-                                in RFC 4646 or ISO 639-2 language code format.
-
-  @param  DriverName[out]       A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                driver specified by This in the language
-                                specified by Language.
-
-  @retval EFI_SUCCESS           The Unicode string for the Driver specified by
-                                This and the language specified by Language was
-                                returned in DriverName.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER DriverName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoComponentNameGetDriverName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **DriverName
-  );
-
-/**
-  Retrieves a Unicode string that is the user readable name of the controller
-  that is being managed by a driver.
-
-  This function retrieves the user readable name of the controller specified by
-  ControllerHandle and ChildHandle in the form of a Unicode string. If the
-  driver specified by This has a user readable name in the language specified by
-  Language, then a pointer to the controller name is returned in ControllerName,
-  and EFI_SUCCESS is returned.  If the driver specified by This is not currently
-  managing the controller specified by ControllerHandle and ChildHandle,
-  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
-  support the language specified by Language, then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  ControllerHandle[in]  The handle of a controller that the driver
-                                specified by This is managing.  This handle
-                                specifies the controller whose name is to be
-                                returned.
-
-  @param  ChildHandle[in]       The handle of the child controller to retrieve
-                                the name of.  This is an optional parameter that
-                                may be NULL.  It will be NULL for device
-                                drivers.  It will also be NULL for a bus drivers
-                                that wish to retrieve the name of the bus
-                                controller.  It will not be NULL for a bus
-                                driver that wishes to retrieve the name of a
-                                child controller.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language.  This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified in
-                                RFC 4646 or ISO 639-2 language code format.
-
-  @param  ControllerName[out]   A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                controller specified by ControllerHandle and
-                                ChildHandle in the language specified by
-                                Language from the point of view of the driver
-                                specified by This.
-
-  @retval EFI_SUCCESS           The Unicode string for the user readable name in
-                                the language specified by Language for the
-                                driver specified by This was returned in
-                                DriverName.
-
-  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
-
-  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
-                                EFI_HANDLE.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
-                                managing the controller specified by
-                                ControllerHandle and ChildHandle.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoComponentNameGetControllerName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  EFI_HANDLE                   ControllerHandle,
-  IN  EFI_HANDLE                   ChildHandle        OPTIONAL,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **ControllerName
-  );
-
-//
-// EFI Component Name Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL  gBiosVideoComponentName = {
-  BiosVideoComponentNameGetDriverName,
-  BiosVideoComponentNameGetControllerName,
-  "eng"
-};
-
-//
-// EFI Component Name 2 Protocol
-//
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL  gBiosVideoComponentName2 = {
-  (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)BiosVideoComponentNameGetDriverName,
-  (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)BiosVideoComponentNameGetControllerName,
-  "en"
-};
-
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE  mBiosVideoDriverNameTable[] = {
-  {
-    "eng;en",
-    L"BIOS[INT10] Video Driver"
-  },
-  {
-    NULL,
-    NULL
-  }
-};
-
-/**
-  Retrieves a Unicode string that is the user readable name of the driver.
-
-  This function retrieves the user readable name of a driver in the form of a
-  Unicode string. If the driver specified by This has a user readable name in
-  the language specified by Language, then a pointer to the driver name is
-  returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
-  by This does not support the language specified by Language,
-  then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language. This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified
-                                in RFC 4646 or ISO 639-2 language code format.
-
-  @param  DriverName[out]       A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                driver specified by This in the language
-                                specified by Language.
-
-  @retval EFI_SUCCESS           The Unicode string for the Driver specified by
-                                This and the language specified by Language was
-                                returned in DriverName.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER DriverName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoComponentNameGetDriverName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **DriverName
-  )
-{
-  return LookupUnicodeString2 (
-           Language,
-           This->SupportedLanguages,
-           mBiosVideoDriverNameTable,
-           DriverName,
-           (BOOLEAN)(This == &gBiosVideoComponentName)
-           );
-}
-
-/**
-  Retrieves a Unicode string that is the user readable name of the controller
-  that is being managed by a driver.
-
-  This function retrieves the user readable name of the controller specified by
-  ControllerHandle and ChildHandle in the form of a Unicode string. If the
-  driver specified by This has a user readable name in the language specified by
-  Language, then a pointer to the controller name is returned in ControllerName,
-  and EFI_SUCCESS is returned.  If the driver specified by This is not currently
-  managing the controller specified by ControllerHandle and ChildHandle,
-  then EFI_UNSUPPORTED is returned.  If the driver specified by This does not
-  support the language specified by Language, then EFI_UNSUPPORTED is returned.
-
-  @param  This[in]              A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
-                                EFI_COMPONENT_NAME_PROTOCOL instance.
-
-  @param  ControllerHandle[in]  The handle of a controller that the driver
-                                specified by This is managing.  This handle
-                                specifies the controller whose name is to be
-                                returned.
-
-  @param  ChildHandle[in]       The handle of the child controller to retrieve
-                                the name of.  This is an optional parameter that
-                                may be NULL.  It will be NULL for device
-                                drivers.  It will also be NULL for a bus drivers
-                                that wish to retrieve the name of the bus
-                                controller.  It will not be NULL for a bus
-                                driver that wishes to retrieve the name of a
-                                child controller.
-
-  @param  Language[in]          A pointer to a Null-terminated ASCII string
-                                array indicating the language.  This is the
-                                language of the driver name that the caller is
-                                requesting, and it must match one of the
-                                languages specified in SupportedLanguages. The
-                                number of languages supported by a driver is up
-                                to the driver writer. Language is specified in
-                                RFC 4646 or ISO 639-2 language code format.
-
-  @param  ControllerName[out]   A pointer to the Unicode string to return.
-                                This Unicode string is the name of the
-                                controller specified by ControllerHandle and
-                                ChildHandle in the language specified by
-                                Language from the point of view of the driver
-                                specified by This.
-
-  @retval EFI_SUCCESS           The Unicode string for the user readable name in
-                                the language specified by Language for the
-                                driver specified by This was returned in
-                                DriverName.
-
-  @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
-
-  @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
-                                EFI_HANDLE.
-
-  @retval EFI_INVALID_PARAMETER Language is NULL.
-
-  @retval EFI_INVALID_PARAMETER ControllerName is NULL.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This is not currently
-                                managing the controller specified by
-                                ControllerHandle and ChildHandle.
-
-  @retval EFI_UNSUPPORTED       The driver specified by This does not support
-                                the language specified by Language.
-
-**/
-EFI_STATUS
-EFIAPI
-BiosVideoComponentNameGetControllerName (
-  IN  EFI_COMPONENT_NAME_PROTOCOL  *This,
-  IN  EFI_HANDLE                   ControllerHandle,
-  IN  EFI_HANDLE                   ChildHandle        OPTIONAL,
-  IN  CHAR8                        *Language,
-  OUT CHAR16                       **ControllerName
-  )
-{
-  return EFI_UNSUPPORTED;
-}



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111080): https://edk2.groups.io/g/devel/message/111080
Mute This Topic: https://groups.io/mt/102518647/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  parent reply	other threads:[~2023-11-10 23:59 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-10 23:57 [edk2-devel] [PATCH 00/37] OvmfPkg: remove the CSM (after edk2-stable202311) Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 01/37] OvmfPkg: cripple CSM_ENABLE macro Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 02/37] OvmfPkg: remove PcdCsmEnable Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 03/37] OvmfPkg: unplug LegacyBootManagerLib from BdsDxe and UiApp Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 04/37] OvmfPkg: remove LegacyBootManagerLib Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 05/37] OvmfPkg: unplug LegacyBootMaintUiLib from UiApp Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 06/37] OvmfPkg: remove LegacyBootMaintUiLib Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 07/37] OvmfPkg: remove gEfiLegacyDevOrderVariableGuid Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 08/37] OvmfPkg: exclude the CSM-based VideoDxe driver Laszlo Ersek
2023-11-10 23:57 ` Laszlo Ersek [this message]
2023-11-10 23:57 ` [edk2-devel] [PATCH 10/37] OvmfPkg: remove gEfiVgaMiniPortProtocolGuid Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 11/37] OvmfPkg: remove Bios Video PCDs Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 12/37] OvmfPkg: exclude LegacyBiosDxe Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 13/37] OvmfPkg/IncompatiblePciDeviceSupportDxe: ignore CSM presence Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 14/37] Revert "OvmfPkg: don't assign PCI BARs above 4GiB when CSM enabled" Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 15/37] OvmfPkg: remove LegacyBiosDxe Laszlo Ersek
2023-11-10 23:57 ` [edk2-devel] [PATCH 16/37] OvmfPkg: exclude NullMemoryTestDxe driver Laszlo Ersek
2024-04-24 11:02   ` Corvin Köhne
2023-11-10 23:58 ` [edk2-devel] [PATCH 17/37] OvmfPkg: remove gEfiIsaIoProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 18/37] OvmfPkg: remove gEfiIsaAcpiProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 19/37] OvmfPkg: remove gEfiLegacyBiosGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 20/37] OvmfPkg: remove LegacyBiosDxe PCDs Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 21/37] OvmfPkg: unplug CsmSupportLib from BdsDxe Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 22/37] OvmfPkg: remove CsmSupportLib Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 23/37] OvmfPkg: remove gEfiFirmwareVolumeProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 24/37] OvmfPkg: remove gEfiLegacyBiosPlatformProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 25/37] OvmfPkg: remove gEfiLegacyBiosProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 26/37] OvmfPkg: remove gEfiLegacyInterruptProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 27/37] OvmfPkg: remove <FrameworkDxe.h> Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 28/37] OvmfPkg: exclude Csm16.inf / Csm16.bin Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 29/37] OvmfPkg: remove Rule.Common.USER_DEFINED.CSM from all FDF files Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 30/37] OvmfPkg: remove Csm16 Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 31/37] OvmfPkg: exclude 8254TimerDxe Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 32/37] OvmfPkg: remove 8254TimerDxe Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 33/37] OvmfPkg: exclude 8259InterruptControllerDxe Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 34/37] OvmfPkg: remove 8259InterruptControllerDxe Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 35/37] OvmfPkg: remove gEfiLegacy8259ProtocolGuid Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 36/37] OvmfPkg: remove Pcd8259LegacyModeEdgeLevel and Pcd8259LegacyModeMask Laszlo Ersek
2023-11-10 23:58 ` [edk2-devel] [PATCH 37/37] OvmfPkg: remove CSM_ENABLE build macro Laszlo Ersek
2023-11-11  2:12 ` [edk2-devel] [PATCH 00/37] OvmfPkg: remove the CSM (after edk2-stable202311) Yao, Jiewen
2023-11-11 10:54   ` Ard Biesheuvel
2023-11-13  7:52     ` Corvin Köhne
2023-11-13 10:44 ` Gerd Hoffmann
2023-12-07 18:10 ` Laszlo Ersek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231110235820.644381-10-lersek@redhat.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox