From: Gerd Hoffmann <kraxel@redhat.com>
To: edk2-devel@lists.01.org
Subject: [PATCH v2 2/4] OvmfPkg: add QemuRamfbDxe
Date: Tue, 12 Jun 2018 11:31:15 +0200 [thread overview]
Message-ID: <20180612093117.27028-3-kraxel@redhat.com> (raw)
In-Reply-To: <20180612093117.27028-1-kraxel@redhat.com>
Add a driver for the qemu ramfb display device.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
OvmfPkg/QemuRamfbDxe/QemuRamfb.c | 396 ++++++++++++++++++++++++++++++++++
OvmfPkg/OvmfPkgIa32.dsc | 1 +
OvmfPkg/OvmfPkgIa32.fdf | 1 +
OvmfPkg/OvmfPkgIa32X64.dsc | 1 +
OvmfPkg/OvmfPkgIa32X64.fdf | 1 +
OvmfPkg/OvmfPkgX64.dsc | 1 +
OvmfPkg/OvmfPkgX64.fdf | 1 +
OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf | 52 +++++
8 files changed, 454 insertions(+)
create mode 100644 OvmfPkg/QemuRamfbDxe/QemuRamfb.c
create mode 100644 OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfb.c b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c
new file mode 100644
index 0000000000..00a2875e99
--- /dev/null
+++ b/OvmfPkg/QemuRamfbDxe/QemuRamfb.c
@@ -0,0 +1,396 @@
+/** @file
+ This driver is a implementation of the Graphics Output Protocol
+ for the QEMU ramfb device.
+
+ Copyright (c) 2018, Red Hat Inc.
+
+ 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
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include <Protocol/GraphicsOutput.h>
+
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/DevicePathLib.h>
+#include <Library/FrameBufferBltLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/QemuFwCfgLib.h>
+
+#include <Guid/QemuRamfb.h>
+
+#define RAMFB_FORMAT 0x34325258 /* DRM_FORMAT_XRGB8888 */
+#define RAMFB_BPP 4
+
+#pragma pack (1)
+typedef struct RAMFB_CONFIG {
+ UINT64 Address;
+ UINT32 FourCC;
+ UINT32 Flags;
+ UINT32 Width;
+ UINT32 Height;
+ UINT32 Stride;
+} RAMFB_CONFIG;
+#pragma pack ()
+
+static EFI_HANDLE mRamfbHandle;
+static EFI_HANDLE mGopHandle;
+static FRAME_BUFFER_CONFIGURE *mQemuRamfbFrameBufferBltConfigure;
+static UINTN mQemuRamfbFrameBufferBltConfigureSize;
+static FIRMWARE_CONFIG_ITEM mRamFbFwCfgItem;
+
+static EFI_GRAPHICS_OUTPUT_MODE_INFORMATION mQemuRamfbModeInfo[] = {
+ {
+ 0, // Version
+ 640, // HorizontalResolution
+ 480, // VerticalResolution
+ },{
+ 0, // Version
+ 800, // HorizontalResolution
+ 600, // VerticalResolution
+ },{
+ 0, // Version
+ 1024, // HorizontalResolution
+ 768, // VerticalResolution
+ }
+};
+#define mQemuRamfbModeCount ARRAY_SIZE(mQemuRamfbModeInfo)
+
+static EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE mQemuRamfbMode = {
+ mQemuRamfbModeCount, // MaxMode
+ 0, // Mode
+ mQemuRamfbModeInfo, // Info
+ sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION), // SizeOfInfo
+};
+
+static
+EFI_STATUS
+EFIAPI
+QemuRamfbGraphicsOutputQueryMode (
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
+ IN UINT32 ModeNumber,
+ OUT UINTN *SizeOfInfo,
+ OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
+ )
+{
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo;
+
+ if (Info == NULL || SizeOfInfo == NULL || ModeNumber >= mQemuRamfbMode.MaxMode) {
+ return EFI_INVALID_PARAMETER;
+ }
+ ModeInfo = &mQemuRamfbModeInfo[ModeNumber];
+
+ *Info = AllocateCopyPool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION),
+ ModeInfo);
+ if (*Info == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);
+
+ return EFI_SUCCESS;
+}
+
+static
+EFI_STATUS
+EFIAPI
+QemuRamfbGraphicsOutputSetMode (
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
+ IN UINT32 ModeNumber
+ )
+{
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo;
+ RAMFB_CONFIG Config;
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black;
+ RETURN_STATUS Status;
+
+ if (ModeNumber >= mQemuRamfbMode.MaxMode) {
+ return EFI_UNSUPPORTED;
+ }
+ ModeInfo = &mQemuRamfbModeInfo[ModeNumber];
+
+ DEBUG ((DEBUG_INFO, "Ramfb: SetMode %u (%ux%u)\n", ModeNumber,
+ ModeInfo->HorizontalResolution, ModeInfo->VerticalResolution));
+
+ Config.Address = SwapBytes64 (mQemuRamfbMode.FrameBufferBase);
+ Config.FourCC = SwapBytes32 (RAMFB_FORMAT);
+ Config.Flags = SwapBytes32 (0);
+ Config.Width = SwapBytes32 (ModeInfo->HorizontalResolution);
+ Config.Height = SwapBytes32 (ModeInfo->VerticalResolution);
+ Config.Stride = SwapBytes32 (ModeInfo->HorizontalResolution * RAMFB_BPP);
+
+ Status = FrameBufferBltConfigure (
+ (VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase,
+ ModeInfo,
+ mQemuRamfbFrameBufferBltConfigure,
+ &mQemuRamfbFrameBufferBltConfigureSize
+ );
+
+ if (Status == RETURN_BUFFER_TOO_SMALL) {
+ if (mQemuRamfbFrameBufferBltConfigure != NULL) {
+ FreePool (mQemuRamfbFrameBufferBltConfigure);
+ }
+ mQemuRamfbFrameBufferBltConfigure =
+ AllocatePool (mQemuRamfbFrameBufferBltConfigureSize);
+ if (mQemuRamfbFrameBufferBltConfigure == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ Status = FrameBufferBltConfigure (
+ (VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase,
+ ModeInfo,
+ mQemuRamfbFrameBufferBltConfigure,
+ &mQemuRamfbFrameBufferBltConfigureSize);
+ if (RETURN_ERROR (Status)) {
+ ASSERT (Status == RETURN_UNSUPPORTED);
+ return Status;
+ }
+ }
+
+ mQemuRamfbMode.Mode = ModeNumber;
+ mQemuRamfbMode.Info = ModeInfo;
+
+ QemuFwCfgSelectItem (mRamFbFwCfgItem);
+ QemuFwCfgWriteBytes (sizeof (Config), &Config);
+
+ //
+ // clear screen
+ //
+ ZeroMem (&Black, sizeof (Black));
+ Status = FrameBufferBlt (
+ mQemuRamfbFrameBufferBltConfigure,
+ &Black,
+ EfiBltVideoFill,
+ 0, // SourceX -- ignored
+ 0, // SourceY -- ignored
+ 0, // DestinationX
+ 0, // DestinationY
+ ModeInfo->HorizontalResolution, // Width
+ ModeInfo->VerticalResolution, // Height
+ 0 // Delta -- ignored
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_WARN, "%a: clearing the screen failed: %r\n",
+ __FUNCTION__, Status));
+ }
+
+ return EFI_SUCCESS;
+}
+
+static
+EFI_STATUS
+EFIAPI
+QemuRamfbGraphicsOutputBlt (
+ 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
+ )
+{
+ return FrameBufferBlt (
+ mQemuRamfbFrameBufferBltConfigure,
+ BltBuffer,
+ BltOperation,
+ SourceX,
+ SourceY,
+ DestinationX,
+ DestinationY,
+ Width,
+ Height,
+ Delta);
+}
+
+EFI_GRAPHICS_OUTPUT_PROTOCOL QemuRamfbGraphicsOutput = {
+ QemuRamfbGraphicsOutputQueryMode,
+ QemuRamfbGraphicsOutputSetMode,
+ QemuRamfbGraphicsOutputBlt,
+ &mQemuRamfbMode,
+};
+
+EFI_STATUS
+EFIAPI
+InitializeQemuRamfb (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_DEVICE_PATH_PROTOCOL *RamfbDevicePath;
+ EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
+ VOID *DevicePath;
+ VENDOR_DEVICE_PATH VendorDeviceNode;
+ ACPI_ADR_DEVICE_PATH AcpiDeviceNode;
+ EFI_STATUS Status;
+ EFI_PHYSICAL_ADDRESS FbBase;
+ UINTN FbSize, MaxFbSize;
+ UINTN Size, Pages, Index;
+
+ if (!QemuFwCfgIsAvailable()) {
+ DEBUG ((DEBUG_INFO, "Ramfb: no FwCfg\n"));
+ return EFI_NOT_FOUND;
+ }
+
+ Status = QemuFwCfgFindFile("etc/ramfb", &mRamFbFwCfgItem, &Size);
+ if (EFI_ERROR (Status)) {
+ return EFI_NOT_FOUND;
+ }
+ if (Size != sizeof (RAMFB_CONFIG)) {
+ DEBUG ((DEBUG_ERROR, "Ramfb: FwCfg size mismatch (expected %d, got %d)\n",
+ sizeof (RAMFB_CONFIG), Size));
+ return EFI_NOT_FOUND;
+ }
+
+ MaxFbSize = 0;
+ for (Index = 0; Index < mQemuRamfbModeCount; Index++) {
+ mQemuRamfbModeInfo[Index].PixelsPerScanLine =
+ mQemuRamfbModeInfo[Index].HorizontalResolution;
+ mQemuRamfbModeInfo[Index].PixelFormat =
+ PixelBlueGreenRedReserved8BitPerColor;
+ FbSize = RAMFB_BPP *
+ mQemuRamfbModeInfo[Index].HorizontalResolution *
+ mQemuRamfbModeInfo[Index].VerticalResolution;
+ if (MaxFbSize < FbSize) {
+ MaxFbSize = FbSize;
+ }
+ DEBUG ((DEBUG_INFO, "Ramfb: Mode %u: %ux%u, %lu kB\n", (UINT64)Index,
+ mQemuRamfbModeInfo[Index].HorizontalResolution,
+ mQemuRamfbModeInfo[Index].VerticalResolution,
+ (UINT64)FbSize / 1024));
+ }
+
+ Pages = EFI_SIZE_TO_PAGES (MaxFbSize);
+ MaxFbSize = EFI_PAGES_TO_SIZE (Pages);
+ FbBase = (EFI_PHYSICAL_ADDRESS)(UINTN)AllocateReservedPages (Pages);
+ if (FbBase == 0) {
+ DEBUG ((DEBUG_INFO, "Ramfb: memory allocation failed\n"));
+ return EFI_OUT_OF_RESOURCES;
+ }
+ DEBUG ((DEBUG_INFO, "Ramfb: Framebuffer at 0x%lx, %ld kB, %ld pages\n",
+ (UINT64)FbBase, (UINT64)MaxFbSize / 1024, (UINT64)Pages));
+ mQemuRamfbMode.FrameBufferSize = MaxFbSize;
+ mQemuRamfbMode.FrameBufferBase = FbBase;
+
+ //
+ // 800 x 600
+ //
+ QemuRamfbGraphicsOutputSetMode (&QemuRamfbGraphicsOutput, 1);
+
+ //
+ // ramfb vendor devpath
+ //
+ VendorDeviceNode.Header.Type = HARDWARE_DEVICE_PATH;
+ VendorDeviceNode.Header.SubType = HW_VENDOR_DP;
+ CopyGuid(&VendorDeviceNode.Guid, &gQemuRamfbGuid);
+ SetDevicePathNodeLength (&VendorDeviceNode.Header,
+ sizeof (VENDOR_DEVICE_PATH));
+
+ RamfbDevicePath = AppendDevicePathNode (NULL,
+ (EFI_DEVICE_PATH_PROTOCOL *) &VendorDeviceNode);
+ if (RamfbDevicePath == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto FreeFramebuffer;
+ }
+
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mRamfbHandle,
+ &gEfiDevicePathProtocolGuid,
+ RamfbDevicePath,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Ramfb: install Ramfb Vendor DevicePath failed: %r\n",
+ Status));
+ goto FreeRamfbDevicePath;
+ }
+
+ //
+ // gop devpath + protocol
+ //
+ 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, // DeviceIdScheme
+ 0, // HeadId
+ 0, // NonVgaOutput
+ 1, // BiosCanDetect
+ 0, // VendorInfo
+ ACPI_ADR_DISPLAY_TYPE_EXTERNAL_DIGITAL, // Type
+ 0, // Port
+ 0 // Index
+ );
+ SetDevicePathNodeLength (&AcpiDeviceNode.Header,
+ sizeof (ACPI_ADR_DEVICE_PATH));
+
+ GopDevicePath = AppendDevicePathNode (RamfbDevicePath,
+ (EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode);
+ if (GopDevicePath == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto FreeRamfbHandle;
+ }
+
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &mGopHandle,
+ &gEfiDevicePathProtocolGuid,
+ GopDevicePath,
+ &gEfiGraphicsOutputProtocolGuid,
+ &QemuRamfbGraphicsOutput,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Ramfb: install GOP DevicePath failed: %r\n",
+ Status));
+ goto FreeGopDevicePath;
+ }
+
+ Status = gBS->OpenProtocol (
+ mRamfbHandle,
+ &gEfiDevicePathProtocolGuid,
+ &DevicePath,
+ gImageHandle,
+ mGopHandle,
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Ramfb: OpenProtocol failed: %r\n", Status));
+ goto FreeGopHandle;
+ }
+
+ return EFI_SUCCESS;
+
+FreeGopHandle:
+ gBS->UninstallMultipleProtocolInterfaces (
+ mGopHandle,
+ &gEfiDevicePathProtocolGuid,
+ GopDevicePath,
+ &gEfiGraphicsOutputProtocolGuid,
+ &QemuRamfbGraphicsOutput,
+ NULL
+ );
+FreeGopDevicePath:
+ FreePool (GopDevicePath);
+FreeRamfbHandle:
+ gBS->UninstallMultipleProtocolInterfaces (
+ mRamfbHandle,
+ &gEfiDevicePathProtocolGuid,
+ RamfbDevicePath,
+ NULL
+ );
+FreeRamfbDevicePath:
+ FreePool (RamfbDevicePath);
+FreeFramebuffer:
+ FreePool ((VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase);
+ return Status;
+}
diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index a2c995b910..7ddda89999 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -745,6 +745,7 @@
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
#
diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf
index b199713925..52b8b1fea1 100644
--- a/OvmfPkg/OvmfPkgIa32.fdf
+++ b/OvmfPkg/OvmfPkgIa32.fdf
@@ -351,6 +351,7 @@ INF RuleOverride=CSM OvmfPkg/Csm/Csm16/Csm16.inf
!endif
INF OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+INF OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
INF OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
INF OvmfPkg/PlatformDxe/Platform.inf
INF OvmfPkg/IoMmuDxe/IoMmuDxe.inf
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index bc7db229d2..3481cdc36b 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -754,6 +754,7 @@
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
#
diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf
index 4ebf64b2b9..70845d6972 100644
--- a/OvmfPkg/OvmfPkgIa32X64.fdf
+++ b/OvmfPkg/OvmfPkgIa32X64.fdf
@@ -357,6 +357,7 @@ INF RuleOverride=CSM OvmfPkg/Csm/Csm16/Csm16.inf
!endif
INF OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+INF OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
INF OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
INF OvmfPkg/PlatformDxe/Platform.inf
INF OvmfPkg/AmdSevDxe/AmdSevDxe.inf
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index 0767b34d18..8b0895b0ff 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -752,6 +752,7 @@
MdeModulePkg/Universal/MemoryTest/NullMemoryTestDxe/NullMemoryTestDxe.inf
OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+ OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
#
diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf
index 9ca96f9282..1eb46ac9a2 100644
--- a/OvmfPkg/OvmfPkgX64.fdf
+++ b/OvmfPkg/OvmfPkgX64.fdf
@@ -357,6 +357,7 @@ INF RuleOverride=CSM OvmfPkg/Csm/Csm16/Csm16.inf
!endif
INF OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
+INF OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
INF OvmfPkg/VirtioGpuDxe/VirtioGpu.inf
INF OvmfPkg/PlatformDxe/Platform.inf
INF OvmfPkg/AmdSevDxe/AmdSevDxe.inf
diff --git a/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf b/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
new file mode 100644
index 0000000000..5a9fd42c32
--- /dev/null
+++ b/OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf
@@ -0,0 +1,52 @@
+## @file
+# This driver is a implementation of the Graphics Output Protocol
+# for the QEMU ramfb device.
+#
+# Copyright (c) 2018, Red Hat Inc.
+#
+# 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
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = QemuRamfbDxe
+ FILE_GUID = dce1b094-7dc6-45d0-9fdd-d7fc3cc3e4ef
+ MODULE_TYPE = DXE_DRIVER
+ VERSION_STRING = 1.0
+
+ ENTRY_POINT = InitializeQemuRamfb
+
+[Sources]
+ QemuRamfb.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ OvmfPkg/OvmfPkg.dec
+
+[LibraryClasses]
+ BaseLib
+ BaseMemoryLib
+ DebugLib
+ DevicePathLib
+ FrameBufferBltLib
+ MemoryAllocationLib
+ UefiBootServicesTableLib
+ UefiDriverEntryPoint
+ QemuFwCfgLib
+
+[Protocols]
+ gEfiGraphicsOutputProtocolGuid # BY_START
+
+[Guids]
+ gQemuRamfbGuid
+
+[Depex]
+ TRUE
--
2.9.3
next prev parent reply other threads:[~2018-06-12 9:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-12 9:31 [PATCH v2 0/4] Add QemuRamfbDxe driver Gerd Hoffmann
2018-06-12 9:31 ` [PATCH v2 1/4] OvmfPkg: add QEMU_RAMFB_GUID Gerd Hoffmann
2018-06-12 15:46 ` Laszlo Ersek
2018-06-12 9:31 ` Gerd Hoffmann [this message]
2018-06-12 17:50 ` [PATCH v2 2/4] OvmfPkg: add QemuRamfbDxe Laszlo Ersek
2018-06-12 9:31 ` [PATCH v2 3/4] OvmfPkg: add QemuRamfb to platform console Gerd Hoffmann
2018-06-12 15:57 ` Laszlo Ersek
2018-06-12 9:31 ` [PATCH v2 4/4] ArmVirtPkg: add QemuRamfbDxe Gerd Hoffmann
2018-06-12 15:59 ` 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=20180612093117.27028-3-kraxel@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