OvmfPkg: QemuVideoDxe uses MdeModulePkg/FrameBufferLib
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Laszlo Ersek <lersek at redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  Graphics Output Protocol functions for the QEMU video controller.
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
  Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
 | 
			
		||||
  This program and the accompanying materials
 | 
			
		||||
  are licensed and made available under the terms and conditions of the BSD License
 | 
			
		||||
@@ -14,8 +14,6 @@
 | 
			
		||||
**/
 | 
			
		||||
 | 
			
		||||
#include "Qemu.h"
 | 
			
		||||
#include <IndustryStandard/Acpi.h>
 | 
			
		||||
#include <Library/BltLib.h>
 | 
			
		||||
 | 
			
		||||
STATIC
 | 
			
		||||
VOID
 | 
			
		||||
@@ -159,7 +157,7 @@ Routine Description:
 | 
			
		||||
{
 | 
			
		||||
  QEMU_VIDEO_PRIVATE_DATA    *Private;
 | 
			
		||||
  QEMU_VIDEO_MODE_DATA       *ModeData;
 | 
			
		||||
//  UINTN                             Count;
 | 
			
		||||
  RETURN_STATUS              Status;
 | 
			
		||||
 | 
			
		||||
  Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);
 | 
			
		||||
 | 
			
		||||
@@ -201,10 +199,32 @@ Routine Description:
 | 
			
		||||
 | 
			
		||||
  QemuVideoCompleteModeData (Private, This->Mode);
 | 
			
		||||
 | 
			
		||||
  BltLibConfigure (
 | 
			
		||||
    (VOID*)(UINTN) This->Mode->FrameBufferBase,
 | 
			
		||||
    This->Mode->Info
 | 
			
		||||
    );
 | 
			
		||||
  //
 | 
			
		||||
  // Allocate when using first time.
 | 
			
		||||
  //
 | 
			
		||||
  if (Private->FrameBufferBltConfigure == NULL) {
 | 
			
		||||
    Status = FrameBufferBltConfigure (
 | 
			
		||||
               (VOID*) (UINTN) This->Mode->FrameBufferBase,
 | 
			
		||||
               This->Mode->Info,
 | 
			
		||||
               Private->FrameBufferBltConfigure,
 | 
			
		||||
               &Private->FrameBufferBltConfigureSize
 | 
			
		||||
               );
 | 
			
		||||
    ASSERT (Status == RETURN_BUFFER_TOO_SMALL);
 | 
			
		||||
    Private->FrameBufferBltConfigure =
 | 
			
		||||
      AllocatePool (Private->FrameBufferBltConfigureSize);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Create the configuration for FrameBufferBltLib
 | 
			
		||||
  //
 | 
			
		||||
  ASSERT (Private->FrameBufferBltConfigure != NULL);
 | 
			
		||||
  Status = FrameBufferBltConfigure (
 | 
			
		||||
              (VOID*) (UINTN) This->Mode->FrameBufferBase,
 | 
			
		||||
              This->Mode->Info,
 | 
			
		||||
              Private->FrameBufferBltConfigure,
 | 
			
		||||
              &Private->FrameBufferBltConfigureSize
 | 
			
		||||
              );
 | 
			
		||||
  ASSERT (Status == RETURN_SUCCESS);
 | 
			
		||||
 | 
			
		||||
  return EFI_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
@@ -254,7 +274,9 @@ Returns:
 | 
			
		||||
{
 | 
			
		||||
  EFI_STATUS                      Status;
 | 
			
		||||
  EFI_TPL                         OriginalTPL;
 | 
			
		||||
  QEMU_VIDEO_PRIVATE_DATA         *Private;
 | 
			
		||||
 | 
			
		||||
  Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);
 | 
			
		||||
  //
 | 
			
		||||
  // 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
 | 
			
		||||
@@ -267,7 +289,8 @@ Returns:
 | 
			
		||||
  case EfiBltBufferToVideo:
 | 
			
		||||
  case EfiBltVideoFill:
 | 
			
		||||
  case EfiBltVideoToVideo:
 | 
			
		||||
    Status = BltLibGopBlt (
 | 
			
		||||
    Status = FrameBufferBlt (
 | 
			
		||||
      Private->FrameBufferBltConfigure,
 | 
			
		||||
      BltBuffer,
 | 
			
		||||
      BltOperation,
 | 
			
		||||
      SourceX,
 | 
			
		||||
@@ -327,6 +350,8 @@ QemuVideoGraphicsOutputConstructor (
 | 
			
		||||
  Private->GraphicsOutput.Mode->MaxMode = (UINT32) Private->MaxMode;
 | 
			
		||||
  Private->GraphicsOutput.Mode->Mode    = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;
 | 
			
		||||
  Private->LineBuffer                   = NULL;
 | 
			
		||||
  Private->FrameBufferBltConfigure      = NULL;
 | 
			
		||||
  Private->FrameBufferBltConfigureSize  = 0;
 | 
			
		||||
 | 
			
		||||
  //
 | 
			
		||||
  // Initialize the hardware
 | 
			
		||||
@@ -374,6 +399,10 @@ Returns:
 | 
			
		||||
    FreePool (Private->LineBuffer);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (Private->FrameBufferBltConfigure != NULL) {
 | 
			
		||||
    FreePool (Private->FrameBufferBltConfigure);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (Private->GraphicsOutput.Mode != NULL) {
 | 
			
		||||
    if (Private->GraphicsOutput.Mode->Info != NULL) {
 | 
			
		||||
      gBS->FreePool (Private->GraphicsOutput.Mode->Info);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/** @file
 | 
			
		||||
  QEMU Video Controller Driver
 | 
			
		||||
 | 
			
		||||
  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
  Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
  This program and the accompanying materials
 | 
			
		||||
  are licensed and made available under the terms and conditions of the BSD License
 | 
			
		||||
  which accompanies this distribution.  The full text of the license may be found at
 | 
			
		||||
@@ -35,8 +35,10 @@
 | 
			
		||||
#include <Library/BaseMemoryLib.h>
 | 
			
		||||
#include <Library/DevicePathLib.h>
 | 
			
		||||
#include <Library/TimerLib.h>
 | 
			
		||||
#include <Library/FrameBufferBltLib.h>
 | 
			
		||||
 | 
			
		||||
#include <IndustryStandard/Pci.h>
 | 
			
		||||
#include <IndustryStandard/Acpi.h>
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// QEMU Video PCI Configuration Header values
 | 
			
		||||
@@ -119,6 +121,8 @@ typedef struct {
 | 
			
		||||
 | 
			
		||||
  UINT8                                 *LineBuffer;
 | 
			
		||||
  QEMU_VIDEO_VARIANT                    Variant;
 | 
			
		||||
  FRAME_BUFFER_CONFIGURE                *FrameBufferBltConfigure;
 | 
			
		||||
  UINTN                                 FrameBufferBltConfigureSize;
 | 
			
		||||
} QEMU_VIDEO_PRIVATE_DATA;
 | 
			
		||||
 | 
			
		||||
///
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#  This driver is a sample implementation of the Graphics Output Protocol for
 | 
			
		||||
#  the QEMU (Cirrus Logic 5446) video controller.
 | 
			
		||||
#
 | 
			
		||||
#  Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
#  Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
 | 
			
		||||
#
 | 
			
		||||
#  This program and the accompanying materials
 | 
			
		||||
#  are licensed and made available under the terms and conditions of the BSD License
 | 
			
		||||
@@ -44,12 +44,13 @@
 | 
			
		||||
 | 
			
		||||
[Packages]
 | 
			
		||||
  MdePkg/MdePkg.dec
 | 
			
		||||
  MdeModulePkg/MdeModulePkg.dec
 | 
			
		||||
  OptionRomPkg/OptionRomPkg.dec
 | 
			
		||||
  OvmfPkg/OvmfPkg.dec
 | 
			
		||||
 | 
			
		||||
[LibraryClasses]
 | 
			
		||||
  BaseMemoryLib
 | 
			
		||||
  BltLib
 | 
			
		||||
  FrameBufferBltLib
 | 
			
		||||
  DebugLib
 | 
			
		||||
  DevicePathLib
 | 
			
		||||
  MemoryAllocationLib
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user