From: Laszlo Ersek <lersek@redhat.com>
To: Ruiyu Ni <ruiyu.ni@intel.com>, edk2-devel@ml01.01.org
Cc: Jordan Justen <jordan.l.justen@intel.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: Re: [PATCH v2 5/5] OvmfPkg: QemuVideoDxe uses MdeModulePkg/FrameBufferLib
Date: Mon, 10 Oct 2016 16:56:11 +0200 [thread overview]
Message-ID: <0f514b21-0a22-d7a2-2433-1cd32224b3c5@redhat.com> (raw)
In-Reply-To: <20161009084953.58512-6-ruiyu.ni@intel.com>
On 10/09/16 10:49, Ruiyu Ni wrote:
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> ---
> OvmfPkg/OvmfPkgIa32.dsc | 6 ++---
> OvmfPkg/OvmfPkgIa32X64.dsc | 6 ++---
> OvmfPkg/OvmfPkgX64.dsc | 5 +---
> OvmfPkg/QemuVideoDxe/Gop.c | 47 ++++++++++++++++++++++++++++-------
> OvmfPkg/QemuVideoDxe/Qemu.h | 17 ++++++++-----
> OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf | 5 ++--
> 6 files changed, 57 insertions(+), 29 deletions(-)
(1) This patch will break ArmVirtPkg, because the following two
additional DSC files include QemuVideoDxe.inf:
ArmVirtPkg/ArmVirtQemu.dsc
ArmVirtPkg/ArmVirtQemuKernel.dsc
So please split up this patch as follows:
- patch 5 -- FrameBufferBltLib class resolution for ArmVirtPkg (2 DSCs),
- patch 6 -- FrameBufferBltLib class resolution for OvmfPkg (3 DSCs),
- patch 7 -- QemuVideoDxe changes.
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index 7213197..13c996f 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -115,6 +115,7 @@ [LibraryClasses]
> LockBoxLib|OvmfPkg/Library/LockBoxLib/LockBoxBaseLib.inf
> !endif
> CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
> + FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
>
> !ifdef $(SOURCE_DEBUG_ENABLE)
> PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
> @@ -633,10 +634,7 @@ [Components]
> MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
>
> - OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf {
> - <LibraryClasses>
> - BltLib|OptionRomPkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
> - }
> + OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
>
> #
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index c27024a..3a90f6f 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -120,6 +120,7 @@ [LibraryClasses]
> LockBoxLib|OvmfPkg/Library/LockBoxLib/LockBoxBaseLib.inf
> !endif
> CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
> + FrameBufferBltLib|MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
>
> !ifdef $(SOURCE_DEBUG_ENABLE)
> PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
> @@ -642,10 +643,7 @@ [Components.X64]
> MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
>
> - OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf {
> - <LibraryClasses>
> - BltLib|OptionRomPkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
> - }
> + OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
>
> #
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index c34b266..ea8ed7f 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -640,10 +640,7 @@ [Components]
> MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
>
> - OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf {
> - <LibraryClasses>
> - BltLib|OptionRomPkg/Library/FrameBufferBltLib/FrameBufferBltLib.inf
> - }
> + OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
>
> #
(2) I think you missed the FrameBufferBltLib resolution in "OvmfPkgX64.dsc".
> diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c
> index 18d0779..532f20e 100644
> --- a/OvmfPkg/QemuVideoDxe/Gop.c
> +++ b/OvmfPkg/QemuVideoDxe/Gop.c
> @@ -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);
> diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h
> index 52ee20d..8d92ebc 100644
> --- a/OvmfPkg/QemuVideoDxe/Qemu.h
> +++ b/OvmfPkg/QemuVideoDxe/Qemu.h
> @@ -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
> @@ -50,11 +52,12 @@
> // QEMU Vide Graphical Mode Data
> //
> typedef struct {
> - UINT32 InternalModeIndex; // points into card-specific mode table
> - UINT32 HorizontalResolution;
> - UINT32 VerticalResolution;
> - UINT32 ColorDepth;
> - UINT32 RefreshRate;
> + UINT32 InternalModeIndex; // points into card-specific mode table
> + UINT32 HorizontalResolution;
> + UINT32 VerticalResolution;
> + UINT32 ColorDepth;
> + UINT32 RefreshRate;
> + FRAME_BUFFER_CONFIGURE *FrameBufferConfigure;
> } QEMU_VIDEO_MODE_DATA;
>
> #define PIXEL_RED_SHIFT 0
(3) This hunk is unnecessary; you never reference the new field
QEMU_VIDEO_MODE_DATA.FrameBufferConfigure.
The rest of this patch looks okay to me.
Thanks
Laszlo
> @@ -119,6 +122,8 @@ typedef struct {
>
> UINT8 *LineBuffer;
> QEMU_VIDEO_VARIANT Variant;
> + FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
> + UINTN FrameBufferBltConfigureSize;
> } QEMU_VIDEO_PRIVATE_DATA;
>
> ///
> diff --git a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> index ce1ff93..affb6ff 100644
> --- a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> +++ b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> @@ -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 @@ [Sources.Ia32, Sources.X64]
>
> [Packages]
> MdePkg/MdePkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> OptionRomPkg/OptionRomPkg.dec
> OvmfPkg/OvmfPkg.dec
>
> [LibraryClasses]
> BaseMemoryLib
> - BltLib
> + FrameBufferBltLib
> DebugLib
> DevicePathLib
> MemoryAllocationLib
>
next prev parent reply other threads:[~2016-10-10 14:56 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-09 8:49 [PATCH v2 0/5] Add FrameBufferBltLib and GraphicsOutputDxe Ruiyu Ni
2016-10-09 8:49 ` [PATCH v2 1/5] MdePkg/GraphicsInfoHob: Add GraphicsDeviceInfo HOB GUID and structure Ruiyu Ni
2016-10-10 2:34 ` [PATCH v3 " Ruiyu Ni
2016-10-10 2:35 ` Ni, Ruiyu
2016-10-11 5:45 ` Gao, Liming
2016-10-09 8:49 ` [PATCH v2 2/5] MdeModulePkg: Add FrameBufferBltLib library class Ruiyu Ni
2016-10-10 14:26 ` Laszlo Ersek
2016-10-09 8:49 ` [PATCH v2 3/5] MdeModulePkg: Add FrameBufferBltLib library instance Ruiyu Ni
2016-10-09 8:49 ` [PATCH v2 4/5] MdeModulePkg: Add GraphicsOutputDxe driver Ruiyu Ni
2016-10-09 8:49 ` [PATCH v2 5/5] OvmfPkg: QemuVideoDxe uses MdeModulePkg/FrameBufferLib Ruiyu Ni
2016-10-10 14:56 ` Laszlo Ersek [this message]
2016-10-10 6:38 ` [PATCH v2 0/5] Add FrameBufferBltLib and GraphicsOutputDxe Tian, Feng
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=0f514b21-0a22-d7a2-2433-1cd32224b3c5@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