From nobody Mon Sep 16 18:51:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1528795905656806.3896910678433; Tue, 12 Jun 2018 02:31:45 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id DE3F12116123A; Tue, 12 Jun 2018 02:31:34 -0700 (PDT) Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0237321155D50 for ; Tue, 12 Jun 2018 02:31:32 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 44CF77C6C4 for ; Tue, 12 Jun 2018 09:31:32 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-109.ams2.redhat.com [10.36.116.109]) by smtp.corp.redhat.com (Postfix) with ESMTP id 47B51111CB9C; Tue, 12 Jun 2018 09:31:29 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9EAB124EF11; Tue, 12 Jun 2018 11:31:28 +0200 (CEST) X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=kraxel@redhat.com; receiver=edk2-devel@lists.01.org From: Gerd Hoffmann To: edk2-devel@lists.01.org Date: Tue, 12 Jun 2018 11:31:15 +0200 Message-Id: <20180612093117.27028-3-kraxel@redhat.com> In-Reply-To: <20180612093117.27028-1-kraxel@redhat.com> References: <20180612093117.27028-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 12 Jun 2018 09:31:32 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 12 Jun 2018 09:31:32 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'kraxel@redhat.com' RCPT:'' Subject: [edk2] [PATCH v2 2/4] OvmfPkg: add QemuRamfbDxe X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Add a driver for the qemu ramfb display device. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Gerd Hoffmann --- 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/QemuRa= mfb.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 BS= D 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 IMP= LIED. + +**/ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#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[] =3D { + { + 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 =3D { + 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 =3D=3D NULL || SizeOfInfo =3D=3D NULL || ModeNumber >=3D mQemuR= amfbMode.MaxMode) { + return EFI_INVALID_PARAMETER; + } + ModeInfo =3D &mQemuRamfbModeInfo[ModeNumber]; + + *Info =3D AllocateCopyPool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION= ), + ModeInfo); + if (*Info =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + *SizeOfInfo =3D 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 >=3D mQemuRamfbMode.MaxMode) { + return EFI_UNSUPPORTED; + } + ModeInfo =3D &mQemuRamfbModeInfo[ModeNumber]; + + DEBUG ((DEBUG_INFO, "Ramfb: SetMode %u (%ux%u)\n", ModeNumber, + ModeInfo->HorizontalResolution, ModeInfo->VerticalResolution)); + + Config.Address =3D SwapBytes64 (mQemuRamfbMode.FrameBufferBase); + Config.FourCC =3D SwapBytes32 (RAMFB_FORMAT); + Config.Flags =3D SwapBytes32 (0); + Config.Width =3D SwapBytes32 (ModeInfo->HorizontalResolution); + Config.Height =3D SwapBytes32 (ModeInfo->VerticalResolution); + Config.Stride =3D SwapBytes32 (ModeInfo->HorizontalResolution * RAMFB_B= PP); + + Status =3D FrameBufferBltConfigure ( + (VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase, + ModeInfo, + mQemuRamfbFrameBufferBltConfigure, + &mQemuRamfbFrameBufferBltConfigureSize + ); + + if (Status =3D=3D RETURN_BUFFER_TOO_SMALL) { + if (mQemuRamfbFrameBufferBltConfigure !=3D NULL) { + FreePool (mQemuRamfbFrameBufferBltConfigure); + } + mQemuRamfbFrameBufferBltConfigure =3D + AllocatePool (mQemuRamfbFrameBufferBltConfigureSize); + if (mQemuRamfbFrameBufferBltConfigure =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Status =3D FrameBufferBltConfigure ( + (VOID*)(UINTN)mQemuRamfbMode.FrameBufferBase, + ModeInfo, + mQemuRamfbFrameBufferBltConfigure, + &mQemuRamfbFrameBufferBltConfigureSize); + if (RETURN_ERROR (Status)) { + ASSERT (Status =3D=3D RETURN_UNSUPPORTED); + return Status; + } + } + + mQemuRamfbMode.Mode =3D ModeNumber; + mQemuRamfbMode.Info =3D ModeInfo; + + QemuFwCfgSelectItem (mRamFbFwCfgItem); + QemuFwCfgWriteBytes (sizeof (Config), &Config); + + // + // clear screen + // + ZeroMem (&Black, sizeof (Black)); + Status =3D 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 =3D { + 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 =3D QemuFwCfgFindFile("etc/ramfb", &mRamFbFwCfgItem, &Size); + if (EFI_ERROR (Status)) { + return EFI_NOT_FOUND; + } + if (Size !=3D sizeof (RAMFB_CONFIG)) { + DEBUG ((DEBUG_ERROR, "Ramfb: FwCfg size mismatch (expected %d, got %d)= \n", + sizeof (RAMFB_CONFIG), Size)); + return EFI_NOT_FOUND; + } + + MaxFbSize =3D 0; + for (Index =3D 0; Index < mQemuRamfbModeCount; Index++) { + mQemuRamfbModeInfo[Index].PixelsPerScanLine =3D + mQemuRamfbModeInfo[Index].HorizontalResolution; + mQemuRamfbModeInfo[Index].PixelFormat =3D + PixelBlueGreenRedReserved8BitPerColor; + FbSize =3D RAMFB_BPP * + mQemuRamfbModeInfo[Index].HorizontalResolution * + mQemuRamfbModeInfo[Index].VerticalResolution; + if (MaxFbSize < FbSize) { + MaxFbSize =3D FbSize; + } + DEBUG ((DEBUG_INFO, "Ramfb: Mode %u: %ux%u, %lu kB\n", (UINT64)Index, + mQemuRamfbModeInfo[Index].HorizontalResolution, + mQemuRamfbModeInfo[Index].VerticalResolution, + (UINT64)FbSize / 1024)); + } + + Pages =3D EFI_SIZE_TO_PAGES (MaxFbSize); + MaxFbSize =3D EFI_PAGES_TO_SIZE (Pages); + FbBase =3D (EFI_PHYSICAL_ADDRESS)(UINTN)AllocateReservedPages (Pages); + if (FbBase =3D=3D 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 =3D MaxFbSize; + mQemuRamfbMode.FrameBufferBase =3D FbBase; + + // + // 800 x 600 + // + QemuRamfbGraphicsOutputSetMode (&QemuRamfbGraphicsOutput, 1); + + // + // ramfb vendor devpath + // + VendorDeviceNode.Header.Type =3D HARDWARE_DEVICE_PATH; + VendorDeviceNode.Header.SubType =3D HW_VENDOR_DP; + CopyGuid(&VendorDeviceNode.Guid, &gQemuRamfbGuid); + SetDevicePathNodeLength (&VendorDeviceNode.Header, + sizeof (VENDOR_DEVICE_PATH)); + + RamfbDevicePath =3D AppendDevicePathNode (NULL, + (EFI_DEVICE_PATH_PROTOCOL *) &VendorDeviceNode); + if (RamfbDevicePath =3D=3D NULL) { + Status =3D EFI_OUT_OF_RESOURCES; + goto FreeFramebuffer; + } + + Status =3D 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 =3D ACPI_DEVICE_PATH; + AcpiDeviceNode.Header.SubType =3D ACPI_ADR_DP; + AcpiDeviceNode.ADR =3D 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 =3D AppendDevicePathNode (RamfbDevicePath, + (EFI_DEVICE_PATH_PROTOCOL *) &AcpiDeviceNode); + if (GopDevicePath =3D=3D NULL) { + Status =3D EFI_OUT_OF_RESOURCES; + goto FreeRamfbHandle; + } + + Status =3D 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 =3D 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 =20 OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf + OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf OvmfPkg/VirtioGpuDxe/VirtioGpu.inf =20 # 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=3DCSM OvmfPkg/Csm/Csm16/Csm16.inf !endif =20 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 =20 OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf + OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf OvmfPkg/VirtioGpuDxe/VirtioGpu.inf =20 # 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=3DCSM OvmfPkg/Csm/Csm16/Csm16.inf !endif =20 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 =20 OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf + OvmfPkg/QemuRamfbDxe/QemuRamfbDxe.inf OvmfPkg/VirtioGpuDxe/VirtioGpu.inf =20 # 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=3DCSM OvmfPkg/Csm/Csm16/Csm16.inf !endif =20 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/Q= emuRamfbDxe.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 B= SD License +# which accompanies this distribution. The full text of the license may b= e 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 IM= PLIED. +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D QemuRamfbDxe + FILE_GUID =3D dce1b094-7dc6-45d0-9fdd-d7fc3cc3e4ef + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + + ENTRY_POINT =3D 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 --=20 2.9.3 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel