From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id DDAC1D80550 for ; Tue, 13 Feb 2024 10:44:27 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=4zzhjF+DiVJJY9IvttUAtknKXS+qCB9my+FZQ2BQKaw=; c=relaxed/simple; d=groups.io; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1707821066; v=1; b=V26D1UUpEuNQUqfPc8mjU0MeoICmgm6br6JW+tar9JqXzQx4ICuOrdMoTBrpldDtj+9MegvJ 7i6mdhxVNnBb1blb16dVEJYL9XYOQBDjxDHfhLL6bWZTcRYkmN0CDJ2GL067Ql2vy3AGYJg7gmm I5QJrf1+er/UAZF7y4j+J5J8= X-Received: by 127.0.0.2 with SMTP id ohTvYY7687511xeNuY4YKVu6; Tue, 13 Feb 2024 02:44:26 -0800 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web11.8919.1707821065479273022 for ; Tue, 13 Feb 2024 02:44:25 -0800 X-Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-194-ts4jZaH4OfO0QMPWDgoB0A-1; Tue, 13 Feb 2024 05:44:21 -0500 X-MC-Unique: ts4jZaH4OfO0QMPWDgoB0A-1 X-Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id F03AF3C28649; Tue, 13 Feb 2024 10:44:20 +0000 (UTC) X-Received: from [10.39.192.68] (unknown [10.39.192.68]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 653C6492BC8; Tue, 13 Feb 2024 10:44:18 +0000 (UTC) Message-ID: <64005185-3cfd-de56-f086-da301aff13ba@redhat.com> Date: Tue, 13 Feb 2024 11:44:17 +0100 MIME-Version: 1.0 Subject: Re: [edk2-devel] [PATCH 1/1] OvmfPkg/QemuVideoDxe: purge VbeShim To: Gerd Hoffmann , devel@edk2.groups.io Cc: Oliver Steffen , Ard Biesheuvel , Jiewen Yao References: <20240213085925.687848-1-kraxel@redhat.com> From: "Laszlo Ersek" In-Reply-To: <20240213085925.687848-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,lersek@redhat.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 5oTHy9wj1FGmHvNvRCXJO7Ssx7686176AA= Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=V26D1UUp; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=redhat.com (policy=none) Hi Gerd, On 2/13/24 09:59, Gerd Hoffmann wrote: > Removing CSM support broke VbeShim. >=20 > I see ASSERTS being triggered, both in vbeshim code and elsewhere. > Didn't investigate in detail, but apparently the real mode address space > is not considered being special any more, which invalidates some > assumptions of the vbeshim code. >=20 > The guest os which depends on vbeshim for video support is -- according > to the comments -- Windows 2008 R2. Which went EOL in January 2020, > more than four years ago. >=20 > Time to retire VbeShim. RIP. I don't understand this, and/or disagree. (1) Please collect more information about the ASSERT()s (the failure mode y= ou are seeing). Because, (a) in the code that's being removed in this patch= , I don't see any ASSERT() that should fire, and (b) I cannot reproduce the= issue. (In fact my log contains "InstallVbeShim: VBE shim installed".) (2) The CSM is actually *mutually exclusive* with the VBE shim. We install = the VBE shim *instead* of the full-blown CSM. In function InstallVbeShim(),= we have: // // Attempt to cover the real mode IVT with an allocation. This is a UEFI // driver, hence the arch protocols have been installed previously. Among // those, the CPU arch protocol has configured the IDT, so we can overwri= te // the IVT used in real mode. // // The allocation request may fail, eg. if LegacyBiosDxe has already run. // Segment0Pages =3D 1; Int0x10 =3D (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeo= f (IVT_ENTRY)); Segment0AllocationStatus =3D gBS->AllocatePages ( AllocateAddress, EfiBootServicesCode, Segment0Pages, &Segment0 ); if (EFI_ERROR (Segment0AllocationStatus)) { EFI_PHYSICAL_ADDRESS Handler; // // Check if a video BIOS handler has been installed previously -- we // shouldn't override a real video BIOS with our shim, nor our own shim= if // it's already present. // Handler =3D (Int0x10->Segment << 4) + Int0x10->Offset; if ((Handler >=3D SegmentC) && (Handler < SegmentF)) { DEBUG (( DEBUG_INFO, "%a: Video BIOS handler found at %04x:%04x\n", __func__, Int0x10->Segment, Int0x10->Offset )); return; } // // Otherwise we'll overwrite the Int10h vector, even though we may not = own // the page at zero. // DEBUG (( DEBUG_INFO, "%a: failed to allocate page at zero: %r\n", __func__, Segment0AllocationStatus )); } else { // // We managed to allocate the page at zero. SVN r14218 guarantees that = it // is NUL-filled. // ASSERT (Int0x10->Segment =3D=3D 0x0000); ASSERT (Int0x10->Offset =3D=3D 0x0000); } If a CSM were present, the "Video BIOS handler found at ..." log message (a= nd the early exit) should be reached. See also the reference to LegacyBiosDxe. In other words, if you build OVMF *without* CSM_ENABLE (before CSM removal)= , or you just remove CSM from the entire tree, that should be identical, as= far as this function is concerned. See also the commit message of commit 90803342b1b6 ("OvmfPkg: QemuVideoDxe:= Int10h stub for Windows 7 & 2008 (stdvga, QXL)", 2014-05-20). (3) Windows 7 may be EOL, but I'm not convinced there are zero users left u= sing it, especially in "air gapped" virtual machines (i.e., VMs that have n= o connection to the public internet), potentially with VBE assignment. Now, I don't insist on keeping the VBE shim alive; it will always be preser= ved in the git history. But I certainly think we should understand the prob= lem in more detail. (Also, if my CSM removal has caused some *other* regres= sion, I'd be happy to learn about that.) ... Does your log contain the line "failed to allocate page at zero"? Becau= se that could be indicative of some other component allocating page#0 earli= er, and the VBE shim corrupting it. *If* that's the case, then I certainly agree to this patch, but then: - please update the commit message slightly, - please remove the InstallVbeShim() declaration from "Qemu.h", - you can add "Reviewed-by: Laszlo Ersek ". Thanks Laszlo >=20 > Signed-off-by: Gerd Hoffmann > --- > OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf | 4 - > OvmfPkg/QemuVideoDxe/VbeShim.h | 701 -------------------------- > OvmfPkg/QemuVideoDxe/Driver.c | 9 - > OvmfPkg/QemuVideoDxe/VbeShim.c | 328 ------------ > OvmfPkg/QemuVideoDxe/VbeShim.asm | 281 ----------- > OvmfPkg/QemuVideoDxe/VbeShim.sh | 82 --- > 6 files changed, 1405 deletions(-) > delete mode 100644 OvmfPkg/QemuVideoDxe/VbeShim.h > delete mode 100644 OvmfPkg/QemuVideoDxe/VbeShim.c > delete mode 100644 OvmfPkg/QemuVideoDxe/VbeShim.asm > delete mode 100755 OvmfPkg/QemuVideoDxe/VbeShim.sh >=20 > diff --git a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf b/OvmfPkg/QemuVideoDxe= /QemuVideoDxe.inf > index 43a6e07faa88..6b7baa8525a7 100644 > --- a/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf > +++ b/OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf > @@ -33,10 +33,6 @@ [Sources.common] > Initialize.c > Qemu.h > =20 > -[Sources.Ia32, Sources.X64] > - VbeShim.c > - VbeShim.h > - > [Packages] > MdePkg/MdePkg.dec > MdeModulePkg/MdeModulePkg.dec > diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.h b/OvmfPkg/QemuVideoDxe/VbeShi= m.h > deleted file mode 100644 > index cc9b6e14cdcd..000000000000 > --- a/OvmfPkg/QemuVideoDxe/VbeShim.h > +++ /dev/null > @@ -1,701 +0,0 @@ > -// > -// THIS FILE WAS GENERATED BY "VbeShim.sh". DO NOT EDIT. > -// > -#ifndef _VBE_SHIM_H_ > -#define _VBE_SHIM_H_ > -STATIC CONST UINT8 mVbeShim[] =3D { > - /* 00000000 nop */ 0x90, > - /* 00000001 nop */ 0x90, > - /* 00000002 nop */ 0x90, > - /* 00000003 nop */ 0x90, > - /* 00000004 nop */ 0x90, > - /* 00000005 nop */ 0x90, > - /* 00000006 nop */ 0x90, > - /* 00000007 nop */ 0x90, > - /* 00000008 nop */ 0x90, > - /* 00000009 nop */ 0x90, > - /* 0000000A nop */ 0x90, > - /* 0000000B nop */ 0x90, > - /* 0000000C nop */ 0x90, > - /* 0000000D nop */ 0x90, > - /* 0000000E nop */ 0x90, > - /* 0000000F nop */ 0x90, > - /* 00000010 nop */ 0x90, > - /* 00000011 nop */ 0x90, > - /* 00000012 nop */ 0x90, > - /* 00000013 nop */ 0x90, > - /* 00000014 nop */ 0x90, > - /* 00000015 nop */ 0x90, > - /* 00000016 nop */ 0x90, > - /* 00000017 nop */ 0x90, > - /* 00000018 nop */ 0x90, > - /* 00000019 nop */ 0x90, > - /* 0000001A nop */ 0x90, > - /* 0000001B nop */ 0x90, > - /* 0000001C nop */ 0x90, > - /* 0000001D nop */ 0x90, > - /* 0000001E nop */ 0x90, > - /* 0000001F nop */ 0x90, > - /* 00000020 nop */ 0x90, > - /* 00000021 nop */ 0x90, > - /* 00000022 nop */ 0x90, > - /* 00000023 nop */ 0x90, > - /* 00000024 nop */ 0x90, > - /* 00000025 nop */ 0x90, > - /* 00000026 nop */ 0x90, > - /* 00000027 nop */ 0x90, > - /* 00000028 nop */ 0x90, > - /* 00000029 nop */ 0x90, > - /* 0000002A nop */ 0x90, > - /* 0000002B nop */ 0x90, > - /* 0000002C nop */ 0x90, > - /* 0000002D nop */ 0x90, > - /* 0000002E nop */ 0x90, > - /* 0000002F nop */ 0x90, > - /* 00000030 nop */ 0x90, > - /* 00000031 nop */ 0x90, > - /* 00000032 nop */ 0x90, > - /* 00000033 nop */ 0x90, > - /* 00000034 nop */ 0x90, > - /* 00000035 nop */ 0x90, > - /* 00000036 nop */ 0x90, > - /* 00000037 nop */ 0x90, > - /* 00000038 nop */ 0x90, > - /* 00000039 nop */ 0x90, > - /* 0000003A nop */ 0x90, > - /* 0000003B nop */ 0x90, > - /* 0000003C nop */ 0x90, > - /* 0000003D nop */ 0x90, > - /* 0000003E nop */ 0x90, > - /* 0000003F nop */ 0x90, > - /* 00000040 nop */ 0x90, > - /* 00000041 nop */ 0x90, > - /* 00000042 nop */ 0x90, > - /* 00000043 nop */ 0x90, > - /* 00000044 nop */ 0x90, > - /* 00000045 nop */ 0x90, > - /* 00000046 nop */ 0x90, > - /* 00000047 nop */ 0x90, > - /* 00000048 nop */ 0x90, > - /* 00000049 nop */ 0x90, > - /* 0000004A nop */ 0x90, > - /* 0000004B nop */ 0x90, > - /* 0000004C nop */ 0x90, > - /* 0000004D nop */ 0x90, > - /* 0000004E nop */ 0x90, > - /* 0000004F nop */ 0x90, > - /* 00000050 nop */ 0x90, > - /* 00000051 nop */ 0x90, > - /* 00000052 nop */ 0x90, > - /* 00000053 nop */ 0x90, > - /* 00000054 nop */ 0x90, > - /* 00000055 nop */ 0x90, > - /* 00000056 nop */ 0x90, > - /* 00000057 nop */ 0x90, > - /* 00000058 nop */ 0x90, > - /* 00000059 nop */ 0x90, > - /* 0000005A nop */ 0x90, > - /* 0000005B nop */ 0x90, > - /* 0000005C nop */ 0x90, > - /* 0000005D nop */ 0x90, > - /* 0000005E nop */ 0x90, > - /* 0000005F nop */ 0x90, > - /* 00000060 nop */ 0x90, > - /* 00000061 nop */ 0x90, > - /* 00000062 nop */ 0x90, > - /* 00000063 nop */ 0x90, > - /* 00000064 nop */ 0x90, > - /* 00000065 nop */ 0x90, > - /* 00000066 nop */ 0x90, > - /* 00000067 nop */ 0x90, > - /* 00000068 nop */ 0x90, > - /* 00000069 nop */ 0x90, > - /* 0000006A nop */ 0x90, > - /* 0000006B nop */ 0x90, > - /* 0000006C nop */ 0x90, > - /* 0000006D nop */ 0x90, > - /* 0000006E nop */ 0x90, > - /* 0000006F nop */ 0x90, > - /* 00000070 nop */ 0x90, > - /* 00000071 nop */ 0x90, > - /* 00000072 nop */ 0x90, > - /* 00000073 nop */ 0x90, > - /* 00000074 nop */ 0x90, > - /* 00000075 nop */ 0x90, > - /* 00000076 nop */ 0x90, > - /* 00000077 nop */ 0x90, > - /* 00000078 nop */ 0x90, > - /* 00000079 nop */ 0x90, > - /* 0000007A nop */ 0x90, > - /* 0000007B nop */ 0x90, > - /* 0000007C nop */ 0x90, > - /* 0000007D nop */ 0x90, > - /* 0000007E nop */ 0x90, > - /* 0000007F nop */ 0x90, > - /* 00000080 nop */ 0x90, > - /* 00000081 nop */ 0x90, > - /* 00000082 nop */ 0x90, > - /* 00000083 nop */ 0x90, > - /* 00000084 nop */ 0x90, > - /* 00000085 nop */ 0x90, > - /* 00000086 nop */ 0x90, > - /* 00000087 nop */ 0x90, > - /* 00000088 nop */ 0x90, > - /* 00000089 nop */ 0x90, > - /* 0000008A nop */ 0x90, > - /* 0000008B nop */ 0x90, > - /* 0000008C nop */ 0x90, > - /* 0000008D nop */ 0x90, > - /* 0000008E nop */ 0x90, > - /* 0000008F nop */ 0x90, > - /* 00000090 nop */ 0x90, > - /* 00000091 nop */ 0x90, > - /* 00000092 nop */ 0x90, > - /* 00000093 nop */ 0x90, > - /* 00000094 nop */ 0x90, > - /* 00000095 nop */ 0x90, > - /* 00000096 nop */ 0x90, > - /* 00000097 nop */ 0x90, > - /* 00000098 nop */ 0x90, > - /* 00000099 nop */ 0x90, > - /* 0000009A nop */ 0x90, > - /* 0000009B nop */ 0x90, > - /* 0000009C nop */ 0x90, > - /* 0000009D nop */ 0x90, > - /* 0000009E nop */ 0x90, > - /* 0000009F nop */ 0x90, > - /* 000000A0 nop */ 0x90, > - /* 000000A1 nop */ 0x90, > - /* 000000A2 nop */ 0x90, > - /* 000000A3 nop */ 0x90, > - /* 000000A4 nop */ 0x90, > - /* 000000A5 nop */ 0x90, > - /* 000000A6 nop */ 0x90, > - /* 000000A7 nop */ 0x90, > - /* 000000A8 nop */ 0x90, > - /* 000000A9 nop */ 0x90, > - /* 000000AA nop */ 0x90, > - /* 000000AB nop */ 0x90, > - /* 000000AC nop */ 0x90, > - /* 000000AD nop */ 0x90, > - /* 000000AE nop */ 0x90, > - /* 000000AF nop */ 0x90, > - /* 000000B0 nop */ 0x90, > - /* 000000B1 nop */ 0x90, > - /* 000000B2 nop */ 0x90, > - /* 000000B3 nop */ 0x90, > - /* 000000B4 nop */ 0x90, > - /* 000000B5 nop */ 0x90, > - /* 000000B6 nop */ 0x90, > - /* 000000B7 nop */ 0x90, > - /* 000000B8 nop */ 0x90, > - /* 000000B9 nop */ 0x90, > - /* 000000BA nop */ 0x90, > - /* 000000BB nop */ 0x90, > - /* 000000BC nop */ 0x90, > - /* 000000BD nop */ 0x90, > - /* 000000BE nop */ 0x90, > - /* 000000BF nop */ 0x90, > - /* 000000C0 nop */ 0x90, > - /* 000000C1 nop */ 0x90, > - /* 000000C2 nop */ 0x90, > - /* 000000C3 nop */ 0x90, > - /* 000000C4 nop */ 0x90, > - /* 000000C5 nop */ 0x90, > - /* 000000C6 nop */ 0x90, > - /* 000000C7 nop */ 0x90, > - /* 000000C8 nop */ 0x90, > - /* 000000C9 nop */ 0x90, > - /* 000000CA nop */ 0x90, > - /* 000000CB nop */ 0x90, > - /* 000000CC nop */ 0x90, > - /* 000000CD nop */ 0x90, > - /* 000000CE nop */ 0x90, > - /* 000000CF nop */ 0x90, > - /* 000000D0 nop */ 0x90, > - /* 000000D1 nop */ 0x90, > - /* 000000D2 nop */ 0x90, > - /* 000000D3 nop */ 0x90, > - /* 000000D4 nop */ 0x90, > - /* 000000D5 nop */ 0x90, > - /* 000000D6 nop */ 0x90, > - /* 000000D7 nop */ 0x90, > - /* 000000D8 nop */ 0x90, > - /* 000000D9 nop */ 0x90, > - /* 000000DA nop */ 0x90, > - /* 000000DB nop */ 0x90, > - /* 000000DC nop */ 0x90, > - /* 000000DD nop */ 0x90, > - /* 000000DE nop */ 0x90, > - /* 000000DF nop */ 0x90, > - /* 000000E0 nop */ 0x90, > - /* 000000E1 nop */ 0x90, > - /* 000000E2 nop */ 0x90, > - /* 000000E3 nop */ 0x90, > - /* 000000E4 nop */ 0x90, > - /* 000000E5 nop */ 0x90, > - /* 000000E6 nop */ 0x90, > - /* 000000E7 nop */ 0x90, > - /* 000000E8 nop */ 0x90, > - /* 000000E9 nop */ 0x90, > - /* 000000EA nop */ 0x90, > - /* 000000EB nop */ 0x90, > - /* 000000EC nop */ 0x90, > - /* 000000ED nop */ 0x90, > - /* 000000EE nop */ 0x90, > - /* 000000EF nop */ 0x90, > - /* 000000F0 nop */ 0x90, > - /* 000000F1 nop */ 0x90, > - /* 000000F2 nop */ 0x90, > - /* 000000F3 nop */ 0x90, > - /* 000000F4 nop */ 0x90, > - /* 000000F5 nop */ 0x90, > - /* 000000F6 nop */ 0x90, > - /* 000000F7 nop */ 0x90, > - /* 000000F8 nop */ 0x90, > - /* 000000F9 nop */ 0x90, > - /* 000000FA nop */ 0x90, > - /* 000000FB nop */ 0x90, > - /* 000000FC nop */ 0x90, > - /* 000000FD nop */ 0x90, > - /* 000000FE nop */ 0x90, > - /* 000000FF nop */ 0x90, > - /* 00000100 nop */ 0x90, > - /* 00000101 nop */ 0x90, > - /* 00000102 nop */ 0x90, > - /* 00000103 nop */ 0x90, > - /* 00000104 nop */ 0x90, > - /* 00000105 nop */ 0x90, > - /* 00000106 nop */ 0x90, > - /* 00000107 nop */ 0x90, > - /* 00000108 nop */ 0x90, > - /* 00000109 nop */ 0x90, > - /* 0000010A nop */ 0x90, > - /* 0000010B nop */ 0x90, > - /* 0000010C nop */ 0x90, > - /* 0000010D nop */ 0x90, > - /* 0000010E nop */ 0x90, > - /* 0000010F nop */ 0x90, > - /* 00000110 nop */ 0x90, > - /* 00000111 nop */ 0x90, > - /* 00000112 nop */ 0x90, > - /* 00000113 nop */ 0x90, > - /* 00000114 nop */ 0x90, > - /* 00000115 nop */ 0x90, > - /* 00000116 nop */ 0x90, > - /* 00000117 nop */ 0x90, > - /* 00000118 nop */ 0x90, > - /* 00000119 nop */ 0x90, > - /* 0000011A nop */ 0x90, > - /* 0000011B nop */ 0x90, > - /* 0000011C nop */ 0x90, > - /* 0000011D nop */ 0x90, > - /* 0000011E nop */ 0x90, > - /* 0000011F nop */ 0x90, > - /* 00000120 nop */ 0x90, > - /* 00000121 nop */ 0x90, > - /* 00000122 nop */ 0x90, > - /* 00000123 nop */ 0x90, > - /* 00000124 nop */ 0x90, > - /* 00000125 nop */ 0x90, > - /* 00000126 nop */ 0x90, > - /* 00000127 nop */ 0x90, > - /* 00000128 nop */ 0x90, > - /* 00000129 nop */ 0x90, > - /* 0000012A nop */ 0x90, > - /* 0000012B nop */ 0x90, > - /* 0000012C nop */ 0x90, > - /* 0000012D nop */ 0x90, > - /* 0000012E nop */ 0x90, > - /* 0000012F nop */ 0x90, > - /* 00000130 nop */ 0x90, > - /* 00000131 nop */ 0x90, > - /* 00000132 nop */ 0x90, > - /* 00000133 nop */ 0x90, > - /* 00000134 nop */ 0x90, > - /* 00000135 nop */ 0x90, > - /* 00000136 nop */ 0x90, > - /* 00000137 nop */ 0x90, > - /* 00000138 nop */ 0x90, > - /* 00000139 nop */ 0x90, > - /* 0000013A nop */ 0x90, > - /* 0000013B nop */ 0x90, > - /* 0000013C nop */ 0x90, > - /* 0000013D nop */ 0x90, > - /* 0000013E nop */ 0x90, > - /* 0000013F nop */ 0x90, > - /* 00000140 nop */ 0x90, > - /* 00000141 nop */ 0x90, > - /* 00000142 nop */ 0x90, > - /* 00000143 nop */ 0x90, > - /* 00000144 nop */ 0x90, > - /* 00000145 nop */ 0x90, > - /* 00000146 nop */ 0x90, > - /* 00000147 nop */ 0x90, > - /* 00000148 nop */ 0x90, > - /* 00000149 nop */ 0x90, > - /* 0000014A nop */ 0x90, > - /* 0000014B nop */ 0x90, > - /* 0000014C nop */ 0x90, > - /* 0000014D nop */ 0x90, > - /* 0000014E nop */ 0x90, > - /* 0000014F nop */ 0x90, > - /* 00000150 nop */ 0x90, > - /* 00000151 nop */ 0x90, > - /* 00000152 nop */ 0x90, > - /* 00000153 nop */ 0x90, > - /* 00000154 nop */ 0x90, > - /* 00000155 nop */ 0x90, > - /* 00000156 nop */ 0x90, > - /* 00000157 nop */ 0x90, > - /* 00000158 nop */ 0x90, > - /* 00000159 nop */ 0x90, > - /* 0000015A nop */ 0x90, > - /* 0000015B nop */ 0x90, > - /* 0000015C nop */ 0x90, > - /* 0000015D nop */ 0x90, > - /* 0000015E nop */ 0x90, > - /* 0000015F nop */ 0x90, > - /* 00000160 nop */ 0x90, > - /* 00000161 nop */ 0x90, > - /* 00000162 nop */ 0x90, > - /* 00000163 nop */ 0x90, > - /* 00000164 nop */ 0x90, > - /* 00000165 nop */ 0x90, > - /* 00000166 nop */ 0x90, > - /* 00000167 nop */ 0x90, > - /* 00000168 nop */ 0x90, > - /* 00000169 nop */ 0x90, > - /* 0000016A nop */ 0x90, > - /* 0000016B nop */ 0x90, > - /* 0000016C nop */ 0x90, > - /* 0000016D nop */ 0x90, > - /* 0000016E nop */ 0x90, > - /* 0000016F nop */ 0x90, > - /* 00000170 nop */ 0x90, > - /* 00000171 nop */ 0x90, > - /* 00000172 nop */ 0x90, > - /* 00000173 nop */ 0x90, > - /* 00000174 nop */ 0x90, > - /* 00000175 nop */ 0x90, > - /* 00000176 nop */ 0x90, > - /* 00000177 nop */ 0x90, > - /* 00000178 nop */ 0x90, > - /* 00000179 nop */ 0x90, > - /* 0000017A nop */ 0x90, > - /* 0000017B nop */ 0x90, > - /* 0000017C nop */ 0x90, > - /* 0000017D nop */ 0x90, > - /* 0000017E nop */ 0x90, > - /* 0000017F nop */ 0x90, > - /* 00000180 nop */ 0x90, > - /* 00000181 nop */ 0x90, > - /* 00000182 nop */ 0x90, > - /* 00000183 nop */ 0x90, > - /* 00000184 nop */ 0x90, > - /* 00000185 nop */ 0x90, > - /* 00000186 nop */ 0x90, > - /* 00000187 nop */ 0x90, > - /* 00000188 nop */ 0x90, > - /* 00000189 nop */ 0x90, > - /* 0000018A nop */ 0x90, > - /* 0000018B nop */ 0x90, > - /* 0000018C nop */ 0x90, > - /* 0000018D nop */ 0x90, > - /* 0000018E nop */ 0x90, > - /* 0000018F nop */ 0x90, > - /* 00000190 nop */ 0x90, > - /* 00000191 nop */ 0x90, > - /* 00000192 nop */ 0x90, > - /* 00000193 nop */ 0x90, > - /* 00000194 nop */ 0x90, > - /* 00000195 nop */ 0x90, > - /* 00000196 nop */ 0x90, > - /* 00000197 nop */ 0x90, > - /* 00000198 nop */ 0x90, > - /* 00000199 nop */ 0x90, > - /* 0000019A nop */ 0x90, > - /* 0000019B nop */ 0x90, > - /* 0000019C nop */ 0x90, > - /* 0000019D nop */ 0x90, > - /* 0000019E nop */ 0x90, > - /* 0000019F nop */ 0x90, > - /* 000001A0 nop */ 0x90, > - /* 000001A1 nop */ 0x90, > - /* 000001A2 nop */ 0x90, > - /* 000001A3 nop */ 0x90, > - /* 000001A4 nop */ 0x90, > - /* 000001A5 nop */ 0x90, > - /* 000001A6 nop */ 0x90, > - /* 000001A7 nop */ 0x90, > - /* 000001A8 nop */ 0x90, > - /* 000001A9 nop */ 0x90, > - /* 000001AA nop */ 0x90, > - /* 000001AB nop */ 0x90, > - /* 000001AC nop */ 0x90, > - /* 000001AD nop */ 0x90, > - /* 000001AE nop */ 0x90, > - /* 000001AF nop */ 0x90, > - /* 000001B0 nop */ 0x90, > - /* 000001B1 nop */ 0x90, > - /* 000001B2 nop */ 0x90, > - /* 000001B3 nop */ 0x90, > - /* 000001B4 nop */ 0x90, > - /* 000001B5 nop */ 0x90, > - /* 000001B6 nop */ 0x90, > - /* 000001B7 nop */ 0x90, > - /* 000001B8 nop */ 0x90, > - /* 000001B9 nop */ 0x90, > - /* 000001BA nop */ 0x90, > - /* 000001BB nop */ 0x90, > - /* 000001BC nop */ 0x90, > - /* 000001BD nop */ 0x90, > - /* 000001BE nop */ 0x90, > - /* 000001BF nop */ 0x90, > - /* 000001C0 nop */ 0x90, > - /* 000001C1 nop */ 0x90, > - /* 000001C2 nop */ 0x90, > - /* 000001C3 nop */ 0x90, > - /* 000001C4 nop */ 0x90, > - /* 000001C5 nop */ 0x90, > - /* 000001C6 nop */ 0x90, > - /* 000001C7 nop */ 0x90, > - /* 000001C8 nop */ 0x90, > - /* 000001C9 nop */ 0x90, > - /* 000001CA nop */ 0x90, > - /* 000001CB nop */ 0x90, > - /* 000001CC nop */ 0x90, > - /* 000001CD nop */ 0x90, > - /* 000001CE nop */ 0x90, > - /* 000001CF nop */ 0x90, > - /* 000001D0 nop */ 0x90, > - /* 000001D1 nop */ 0x90, > - /* 000001D2 nop */ 0x90, > - /* 000001D3 nop */ 0x90, > - /* 000001D4 nop */ 0x90, > - /* 000001D5 nop */ 0x90, > - /* 000001D6 nop */ 0x90, > - /* 000001D7 nop */ 0x90, > - /* 000001D8 nop */ 0x90, > - /* 000001D9 nop */ 0x90, > - /* 000001DA nop */ 0x90, > - /* 000001DB nop */ 0x90, > - /* 000001DC nop */ 0x90, > - /* 000001DD nop */ 0x90, > - /* 000001DE nop */ 0x90, > - /* 000001DF nop */ 0x90, > - /* 000001E0 nop */ 0x90, > - /* 000001E1 nop */ 0x90, > - /* 000001E2 nop */ 0x90, > - /* 000001E3 nop */ 0x90, > - /* 000001E4 nop */ 0x90, > - /* 000001E5 nop */ 0x90, > - /* 000001E6 nop */ 0x90, > - /* 000001E7 nop */ 0x90, > - /* 000001E8 nop */ 0x90, > - /* 000001E9 nop */ 0x90, > - /* 000001EA nop */ 0x90, > - /* 000001EB nop */ 0x90, > - /* 000001EC nop */ 0x90, > - /* 000001ED nop */ 0x90, > - /* 000001EE nop */ 0x90, > - /* 000001EF nop */ 0x90, > - /* 000001F0 nop */ 0x90, > - /* 000001F1 nop */ 0x90, > - /* 000001F2 nop */ 0x90, > - /* 000001F3 nop */ 0x90, > - /* 000001F4 nop */ 0x90, > - /* 000001F5 nop */ 0x90, > - /* 000001F6 nop */ 0x90, > - /* 000001F7 nop */ 0x90, > - /* 000001F8 nop */ 0x90, > - /* 000001F9 nop */ 0x90, > - /* 000001FA nop */ 0x90, > - /* 000001FB nop */ 0x90, > - /* 000001FC nop */ 0x90, > - /* 000001FD nop */ 0x90, > - /* 000001FE nop */ 0x90, > - /* 000001FF nop */ 0x90, > - /* 00000200 cmp ax,0x4f00 */ 0x3D, 0x00, 0x4F, > - /* 00000203 jz 0x22d */ 0x74, 0x28, > - /* 00000205 cmp ax,0x4f01 */ 0x3D, 0x01, 0x4F, > - /* 00000208 jz 0x245 */ 0x74, 0x3B, > - /* 0000020A cmp ax,0x4f02 */ 0x3D, 0x02, 0x4F, > - /* 0000020D jz 0x269 */ 0x74, 0x5A, > - /* 0000020F cmp ax,0x4f03 */ 0x3D, 0x03, 0x4F, > - /* 00000212 jz word 0x331 */ 0x0F, 0x84, 0x1B, 0x01, > - /* 00000216 cmp ax,0x4f10 */ 0x3D, 0x10, 0x4F, > - /* 00000219 jz word 0x336 */ 0x0F, 0x84, 0x19, 0x01, > - /* 0000021D cmp ax,0x4f15 */ 0x3D, 0x15, 0x4F, > - /* 00000220 jz word 0x338 */ 0x0F, 0x84, 0x14, 0x01, > - /* 00000224 cmp ah,0x0 */ 0x80, 0xFC, 0x00, > - /* 00000227 jz word 0x33a */ 0x0F, 0x84, 0x0F, 0x01, > - /* 0000022B jmp short 0x22b */ 0xEB, 0xFE, > - /* 0000022D push es */ 0x06, > - /* 0000022E push di */ 0x57, > - /* 0000022F push ds */ 0x1E, > - /* 00000230 push si */ 0x56, > - /* 00000231 push cx */ 0x51, > - /* 00000232 push cs */ 0x0E, > - /* 00000233 pop ds */ 0x1F, > - /* 00000234 mov si,0x0 */ 0xBE, 0x00, 0x00, > - /* 00000237 mov cx,0x100 */ 0xB9, 0x00, 0x01, > - /* 0000023A cld */ 0xFC, > - /* 0000023B rep movsb */ 0xF3, 0xA4, > - /* 0000023D pop cx */ 0x59, > - /* 0000023E pop si */ 0x5E, > - /* 0000023F pop ds */ 0x1F, > - /* 00000240 pop di */ 0x5F, > - /* 00000241 pop es */ 0x07, > - /* 00000242 jmp word 0x34c */ 0xE9, 0x07, 0x01, > - /* 00000245 push es */ 0x06, > - /* 00000246 push di */ 0x57, > - /* 00000247 push ds */ 0x1E, > - /* 00000248 push si */ 0x56, > - /* 00000249 push cx */ 0x51, > - /* 0000024A and cx,0xbfff */ 0x81, 0xE1, 0xFF, 0xBF, > - /* 0000024E cmp cx,0xf1 */ 0x81, 0xF9, 0xF1, 0x00, > - /* 00000252 jz 0x256 */ 0x74, 0x02, > - /* 00000254 jmp short 0x22b */ 0xEB, 0xD5, > - /* 00000256 push cs */ 0x0E, > - /* 00000257 pop ds */ 0x1F, > - /* 00000258 mov si,0x100 */ 0xBE, 0x00, 0x01, > - /* 0000025B mov cx,0x100 */ 0xB9, 0x00, 0x01, > - /* 0000025E cld */ 0xFC, > - /* 0000025F rep movsb */ 0xF3, 0xA4, > - /* 00000261 pop cx */ 0x59, > - /* 00000262 pop si */ 0x5E, > - /* 00000263 pop ds */ 0x1F, > - /* 00000264 pop di */ 0x5F, > - /* 00000265 pop es */ 0x07, > - /* 00000266 jmp word 0x34c */ 0xE9, 0xE3, 0x00, > - /* 00000269 push dx */ 0x52, > - /* 0000026A push ax */ 0x50, > - /* 0000026B cmp bx,0x40f1 */ 0x81, 0xFB, 0xF1, 0x40, > - /* 0000026F jz 0x273 */ 0x74, 0x02, > - /* 00000271 jmp short 0x22b */ 0xEB, 0xB8, > - /* 00000273 mov dx,0x3c0 */ 0xBA, 0xC0, 0x03, > - /* 00000276 mov al,0x20 */ 0xB0, 0x20, > - /* 00000278 out dx,al */ 0xEE, > - /* 00000279 push dx */ 0x52, > - /* 0000027A push ax */ 0x50, > - /* 0000027B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 0000027E mov ax,0x4 */ 0xB8, 0x04, 0x00, > - /* 00000281 out dx,ax */ 0xEF, > - /* 00000282 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 00000285 mov ax,0x0 */ 0xB8, 0x00, 0x00, > - /* 00000288 out dx,ax */ 0xEF, > - /* 00000289 pop ax */ 0x58, > - /* 0000028A pop dx */ 0x5A, > - /* 0000028B push dx */ 0x52, > - /* 0000028C push ax */ 0x50, > - /* 0000028D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 00000290 mov ax,0x5 */ 0xB8, 0x05, 0x00, > - /* 00000293 out dx,ax */ 0xEF, > - /* 00000294 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 00000297 mov ax,0x0 */ 0xB8, 0x00, 0x00, > - /* 0000029A out dx,ax */ 0xEF, > - /* 0000029B pop ax */ 0x58, > - /* 0000029C pop dx */ 0x5A, > - /* 0000029D push dx */ 0x52, > - /* 0000029E push ax */ 0x50, > - /* 0000029F mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 000002A2 mov ax,0x8 */ 0xB8, 0x08, 0x00, > - /* 000002A5 out dx,ax */ 0xEF, > - /* 000002A6 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 000002A9 mov ax,0x0 */ 0xB8, 0x00, 0x00, > - /* 000002AC out dx,ax */ 0xEF, > - /* 000002AD pop ax */ 0x58, > - /* 000002AE pop dx */ 0x5A, > - /* 000002AF push dx */ 0x52, > - /* 000002B0 push ax */ 0x50, > - /* 000002B1 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 000002B4 mov ax,0x9 */ 0xB8, 0x09, 0x00, > - /* 000002B7 out dx,ax */ 0xEF, > - /* 000002B8 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 000002BB mov ax,0x0 */ 0xB8, 0x00, 0x00, > - /* 000002BE out dx,ax */ 0xEF, > - /* 000002BF pop ax */ 0x58, > - /* 000002C0 pop dx */ 0x5A, > - /* 000002C1 push dx */ 0x52, > - /* 000002C2 push ax */ 0x50, > - /* 000002C3 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 000002C6 mov ax,0x3 */ 0xB8, 0x03, 0x00, > - /* 000002C9 out dx,ax */ 0xEF, > - /* 000002CA mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 000002CD mov ax,0x20 */ 0xB8, 0x20, 0x00, > - /* 000002D0 out dx,ax */ 0xEF, > - /* 000002D1 pop ax */ 0x58, > - /* 000002D2 pop dx */ 0x5A, > - /* 000002D3 push dx */ 0x52, > - /* 000002D4 push ax */ 0x50, > - /* 000002D5 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 000002D8 mov ax,0x1 */ 0xB8, 0x01, 0x00, > - /* 000002DB out dx,ax */ 0xEF, > - /* 000002DC mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 000002DF mov ax,0x400 */ 0xB8, 0x00, 0x04, > - /* 000002E2 out dx,ax */ 0xEF, > - /* 000002E3 pop ax */ 0x58, > - /* 000002E4 pop dx */ 0x5A, > - /* 000002E5 push dx */ 0x52, > - /* 000002E6 push ax */ 0x50, > - /* 000002E7 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 000002EA mov ax,0x6 */ 0xB8, 0x06, 0x00, > - /* 000002ED out dx,ax */ 0xEF, > - /* 000002EE mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 000002F1 mov ax,0x400 */ 0xB8, 0x00, 0x04, > - /* 000002F4 out dx,ax */ 0xEF, > - /* 000002F5 pop ax */ 0x58, > - /* 000002F6 pop dx */ 0x5A, > - /* 000002F7 push dx */ 0x52, > - /* 000002F8 push ax */ 0x50, > - /* 000002F9 mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 000002FC mov ax,0x2 */ 0xB8, 0x02, 0x00, > - /* 000002FF out dx,ax */ 0xEF, > - /* 00000300 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 00000303 mov ax,0x300 */ 0xB8, 0x00, 0x03, > - /* 00000306 out dx,ax */ 0xEF, > - /* 00000307 pop ax */ 0x58, > - /* 00000308 pop dx */ 0x5A, > - /* 00000309 push dx */ 0x52, > - /* 0000030A push ax */ 0x50, > - /* 0000030B mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 0000030E mov ax,0x7 */ 0xB8, 0x07, 0x00, > - /* 00000311 out dx,ax */ 0xEF, > - /* 00000312 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 00000315 mov ax,0x300 */ 0xB8, 0x00, 0x03, > - /* 00000318 out dx,ax */ 0xEF, > - /* 00000319 pop ax */ 0x58, > - /* 0000031A pop dx */ 0x5A, > - /* 0000031B push dx */ 0x52, > - /* 0000031C push ax */ 0x50, > - /* 0000031D mov dx,0x1ce */ 0xBA, 0xCE, 0x01, > - /* 00000320 mov ax,0x4 */ 0xB8, 0x04, 0x00, > - /* 00000323 out dx,ax */ 0xEF, > - /* 00000324 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01, > - /* 00000327 mov ax,0x41 */ 0xB8, 0x41, 0x00, > - /* 0000032A out dx,ax */ 0xEF, > - /* 0000032B pop ax */ 0x58, > - /* 0000032C pop dx */ 0x5A, > - /* 0000032D pop ax */ 0x58, > - /* 0000032E pop dx */ 0x5A, > - /* 0000032F jmp short 0x34c */ 0xEB, 0x1B, > - /* 00000331 mov bx,0x40f1 */ 0xBB, 0xF1, 0x40, > - /* 00000334 jmp short 0x34c */ 0xEB, 0x16, > - /* 00000336 jmp short 0x350 */ 0xEB, 0x18, > - /* 00000338 jmp short 0x350 */ 0xEB, 0x16, > - /* 0000033A cmp al,0x3 */ 0x3C, 0x03, > - /* 0000033C jz 0x345 */ 0x74, 0x07, > - /* 0000033E cmp al,0x12 */ 0x3C, 0x12, > - /* 00000340 jz 0x349 */ 0x74, 0x07, > - /* 00000342 jmp word 0x22b */ 0xE9, 0xE6, 0xFE, > - /* 00000345 mov al,0x30 */ 0xB0, 0x30, > - /* 00000347 jmp short 0x34b */ 0xEB, 0x02, > - /* 00000349 mov al,0x20 */ 0xB0, 0x20, > - /* 0000034B iretw */ 0xCF, > - /* 0000034C mov ax,0x4f */ 0xB8, 0x4F, 0x00, > - /* 0000034F iretw */ 0xCF, > - /* 00000350 mov ax,0x14f */ 0xB8, 0x4F, 0x01, > - /* 00000353 iretw */ 0xCF, > -}; > -#endif > diff --git a/OvmfPkg/QemuVideoDxe/Driver.c b/OvmfPkg/QemuVideoDxe/Driver.= c > index c28171d13719..6feca8380224 100644 > --- a/OvmfPkg/QemuVideoDxe/Driver.c > +++ b/OvmfPkg/QemuVideoDxe/Driver.c > @@ -466,15 +466,6 @@ QemuVideoControllerDriverStart ( > goto UninstallGop; > } > =20 > - #if defined MDE_CPU_IA32 || defined MDE_CPU_X64 > - if ((Private->Variant =3D=3D QEMU_VIDEO_BOCHS_MMIO) || > - (Private->Variant =3D=3D QEMU_VIDEO_BOCHS)) > - { > - InstallVbeShim (Card->Name, Private->GraphicsOutput.Mode->FrameBuffe= rBase); > - } > - > - #endif > - > gBS->RestoreTPL (OldTpl); > return EFI_SUCCESS; > =20 > diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.c b/OvmfPkg/QemuVideoDxe/VbeShi= m.c > deleted file mode 100644 > index 8f151b96f9a5..000000000000 > --- a/OvmfPkg/QemuVideoDxe/VbeShim.c > +++ /dev/null > @@ -1,328 +0,0 @@ > -/** @file > - Install a fake VGABIOS service handler (real mode Int10h) for the bugg= y > - Windows 2008 R2 SP1 UEFI guest. > - > - The handler is never meant to be directly executed by a VCPU; it's the= re for > - the internal real mode emulator of Windows 2008 R2 SP1. > - > - The code is based on Ralf Brown's Interrupt List: > - > - > - > - Copyright (C) 2014, Red Hat, Inc. > - Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.
> - > - SPDX-License-Identifier: BSD-2-Clause-Patent > -**/ > - > -#include > -#include > -#include > -#include > -#include > - > -#include "Qemu.h" > -#include "VbeShim.h" > - > -#pragma pack (1) > -typedef struct { > - UINT16 Offset; > - UINT16 Segment; > -} IVT_ENTRY; > -#pragma pack () > - > -// > -// This string is displayed by Windows 2008 R2 SP1 in the Screen Resolut= ion, > -// Advanced Settings dialog. It should be short. > -// > -STATIC CONST CHAR8 mProductRevision[] =3D "OVMF Int10h (fake)"; > - > -/** > - Install the VBE Info and VBE Mode Info structures, and the VBE service > - handler routine in the C segment. Point the real-mode Int10h interrupt= vector > - to the handler. The only advertised mode is 1024x768x32. > - > - @param[in] CardName Name of the video card to be exposed in th= e > - Product Name field of the VBE Info structu= re. The > - parameter must originate from a > - QEMU_VIDEO_CARD.Name field. > - @param[in] FrameBufferBase Guest-physical base address of the video c= ard's > - frame buffer. > -**/ > -VOID > -InstallVbeShim ( > - IN CONST CHAR16 *CardName, > - IN EFI_PHYSICAL_ADDRESS FrameBufferBase > - ) > -{ > - EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF; > - UINTN Segment0Pages; > - IVT_ENTRY *Int0x10; > - EFI_STATUS Segment0AllocationStatus; > - UINT16 HostBridgeDevId; > - UINTN Pam1Address; > - UINT8 Pam1; > - UINTN SegmentCPages; > - VBE_INFO *VbeInfoFull; > - VBE_INFO_BASE *VbeInfo; > - UINT8 *Ptr; > - UINTN Printed; > - VBE_MODE_INFO *VbeModeInfo; > - > - if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT0|BIT7)) =3D= =3D BIT0) { > - DEBUG (( > - DEBUG_WARN, > - "%a: page 0 protected, not installing VBE shim\n", > - __func__ > - )); > - DEBUG (( > - DEBUG_WARN, > - "%a: page 0 protection prevents Windows 7 from booting anyway\n", > - __func__ > - )); > - return; > - } > - > - Segment0 =3D 0x00000; > - SegmentC =3D 0xC0000; > - SegmentF =3D 0xF0000; > - > - // > - // Attempt to cover the real mode IVT with an allocation. This is a UE= FI > - // driver, hence the arch protocols have been installed previously. Am= ong > - // those, the CPU arch protocol has configured the IDT, so we can over= write > - // the IVT used in real mode. > - // > - // The allocation request may fail, eg. if LegacyBiosDxe has already r= un. > - // > - Segment0Pages =3D 1; > - Int0x10 =3D (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * si= zeof (IVT_ENTRY)); > - Segment0AllocationStatus =3D gBS->AllocatePages ( > - AllocateAddress, > - EfiBootServicesCode, > - Segment0Pages, > - &Segment0 > - ); > - > - if (EFI_ERROR (Segment0AllocationStatus)) { > - EFI_PHYSICAL_ADDRESS Handler; > - > - // > - // Check if a video BIOS handler has been installed previously -- we > - // shouldn't override a real video BIOS with our shim, nor our own s= him if > - // it's already present. > - // > - Handler =3D (Int0x10->Segment << 4) + Int0x10->Offset; > - if ((Handler >=3D SegmentC) && (Handler < SegmentF)) { > - DEBUG (( > - DEBUG_INFO, > - "%a: Video BIOS handler found at %04x:%04x\n", > - __func__, > - Int0x10->Segment, > - Int0x10->Offset > - )); > - return; > - } > - > - // > - // Otherwise we'll overwrite the Int10h vector, even though we may n= ot own > - // the page at zero. > - // > - DEBUG (( > - DEBUG_INFO, > - "%a: failed to allocate page at zero: %r\n", > - __func__, > - Segment0AllocationStatus > - )); > - } else { > - // > - // We managed to allocate the page at zero. SVN r14218 guarantees th= at it > - // is NUL-filled. > - // > - ASSERT (Int0x10->Segment =3D=3D 0x0000); > - ASSERT (Int0x10->Offset =3D=3D 0x0000); > - } > - > - // > - // Put the shim in place first. > - // > - // Start by determining the address of the PAM1 register. > - // > - HostBridgeDevId =3D PcdGet16 (PcdOvmfHostBridgePciDevId); > - switch (HostBridgeDevId) { > - case INTEL_82441_DEVICE_ID: > - Pam1Address =3D PMC_REGISTER_PIIX4 (PIIX4_PAM1); > - break; > - case INTEL_Q35_MCH_DEVICE_ID: > - Pam1Address =3D DRAMC_REGISTER_Q35 (MCH_PAM1); > - break; > - case MICROVM_PSEUDO_DEVICE_ID: > - return; > - default: > - DEBUG (( > - DEBUG_ERROR, > - "%a: unknown host bridge device ID: 0x%04x\n", > - __func__, > - HostBridgeDevId > - )); > - ASSERT (FALSE); > - > - if (!EFI_ERROR (Segment0AllocationStatus)) { > - gBS->FreePages (Segment0, Segment0Pages); > - } > - > - return; > - } > - > - // > - // low nibble covers 0xC0000 to 0xC3FFF > - // high nibble covers 0xC4000 to 0xC7FFF > - // bit1 in each nibble is Write Enable > - // bit0 in each nibble is Read Enable > - // > - Pam1 =3D PciRead8 (Pam1Address); > - PciWrite8 (Pam1Address, Pam1 | (BIT1 | BIT0)); > - > - // > - // We never added memory space during PEI or DXE for the C segment, so= we > - // don't need to (and can't) allocate from there. Also, guest operatin= g > - // systems will see a hole in the UEFI memory map there. > - // > - SegmentCPages =3D 4; > - > - ASSERT (sizeof mVbeShim <=3D EFI_PAGES_TO_SIZE (SegmentCPages)); > - CopyMem ((VOID *)(UINTN)SegmentC, mVbeShim, sizeof mVbeShim); > - > - // > - // Fill in the VBE INFO structure. > - // > - VbeInfoFull =3D (VBE_INFO *)(UINTN)SegmentC; > - VbeInfo =3D &VbeInfoFull->Base; > - Ptr =3D VbeInfoFull->Buffer; > - > - CopyMem (VbeInfo->Signature, "VESA", 4); > - VbeInfo->VesaVersion =3D 0x0300; > - > - VbeInfo->OemNameAddress =3D (UINT32)SegmentC << 12 | (UINT16)(UINTN)Pt= r; > - CopyMem (Ptr, "QEMU", 5); > - Ptr +=3D 5; > - > - VbeInfo->Capabilities =3D BIT0; // DAC can be switched into 8-bit mode > - > - VbeInfo->ModeListAddress =3D (UINT32)SegmentC << 12 | (UINT16)(UINTN)P= tr; > - *(UINT16 *)Ptr =3D 0x00f1; // mode number > - Ptr +=3D 2; > - *(UINT16 *)Ptr =3D 0xFFFF; // mode list terminator > - Ptr +=3D 2; > - > - VbeInfo->VideoMem64K =3D (UINT16)((1024 * 768 * 4 + 65535) / 65= 536); > - VbeInfo->OemSoftwareVersion =3D 0x0000; > - > - VbeInfo->VendorNameAddress =3D (UINT32)SegmentC << 12 | (UINT16)(UINTN= )Ptr; > - CopyMem (Ptr, "OVMF", 5); > - Ptr +=3D 5; > - > - VbeInfo->ProductNameAddress =3D (UINT32)SegmentC << 12 | (UINT16)(UINT= N)Ptr; > - Printed =3D AsciiSPrint ( > - (CHAR8 *)Ptr, > - sizeof VbeInfoFull->Buffer - (Ptr - Vb= eInfoFull->Buffer), > - "%s", > - CardName > - ); > - Ptr +=3D Printed + 1; > - > - VbeInfo->ProductRevAddress =3D (UINT32)SegmentC << 12 | (UINT16)(UINTN= )Ptr; > - CopyMem (Ptr, mProductRevision, sizeof mProductRevision); > - Ptr +=3D sizeof mProductRevision; > - > - ASSERT (sizeof VbeInfoFull->Buffer >=3D Ptr - VbeInfoFull->Buffer); > - ZeroMem (Ptr, sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer)= ); > - > - // > - // Fil in the VBE MODE INFO structure. > - // > - VbeModeInfo =3D (VBE_MODE_INFO *)(VbeInfoFull + 1); > - > - // > - // bit0: mode supported by present hardware configuration > - // bit1: optional information available (must be =3D1 for VBE v1.2+) > - // bit3: set if color, clear if monochrome > - // bit4: set if graphics mode, clear if text mode > - // bit5: mode is not VGA-compatible > - // bit7: linear framebuffer mode supported > - // > - VbeModeInfo->ModeAttr =3D BIT7 | BIT5 | BIT4 | BIT3 | BIT1 | BIT0; > - > - // > - // bit0: exists > - // bit1: bit1: readable > - // bit2: writeable > - // > - VbeModeInfo->WindowAAttr =3D BIT2 | BIT1 | BIT0; > - > - VbeModeInfo->WindowBAttr =3D 0x00; > - VbeModeInfo->WindowGranularityKB =3D 0x0040; > - VbeModeInfo->WindowSizeKB =3D 0x0040; > - VbeModeInfo->WindowAStartSegment =3D 0xA000; > - VbeModeInfo->WindowBStartSegment =3D 0x0000; > - VbeModeInfo->WindowPositioningAddress =3D 0x0000; > - VbeModeInfo->BytesPerScanLine =3D 1024 * 4; > - > - VbeModeInfo->Width =3D 1024; > - VbeModeInfo->Height =3D 768; > - VbeModeInfo->CharCellWidth =3D 8; > - VbeModeInfo->CharCellHeight =3D 16; > - VbeModeInfo->NumPlanes =3D 1; > - VbeModeInfo->BitsPerPixel =3D 32; > - VbeModeInfo->NumBanks =3D 1; > - VbeModeInfo->MemoryModel =3D 6; // direct color > - VbeModeInfo->BankSizeKB =3D 0; > - VbeModeInfo->NumImagePagesLessOne =3D 0; > - VbeModeInfo->Vbe3 =3D 0x01; > - > - VbeModeInfo->RedMaskSize =3D 8; > - VbeModeInfo->RedMaskPos =3D 16; > - VbeModeInfo->GreenMaskSize =3D 8; > - VbeModeInfo->GreenMaskPos =3D 8; > - VbeModeInfo->BlueMaskSize =3D 8; > - VbeModeInfo->BlueMaskPos =3D 0; > - VbeModeInfo->ReservedMaskSize =3D 8; > - VbeModeInfo->ReservedMaskPos =3D 24; > - > - // > - // bit1: Bytes in reserved field may be used by application > - // > - VbeModeInfo->DirectColorModeInfo =3D BIT1; > - > - VbeModeInfo->LfbAddress =3D (UINT32)FrameBufferBase; > - VbeModeInfo->OffScreenAddress =3D 0; > - VbeModeInfo->OffScreenSizeKB =3D 0; > - > - VbeModeInfo->BytesPerScanLineLinear =3D 1024 * 4; > - VbeModeInfo->NumImagesLessOneBanked =3D 0; > - VbeModeInfo->NumImagesLessOneLinear =3D 0; > - VbeModeInfo->RedMaskSizeLinear =3D 8; > - VbeModeInfo->RedMaskPosLinear =3D 16; > - VbeModeInfo->GreenMaskSizeLinear =3D 8; > - VbeModeInfo->GreenMaskPosLinear =3D 8; > - VbeModeInfo->BlueMaskSizeLinear =3D 8; > - VbeModeInfo->BlueMaskPosLinear =3D 0; > - VbeModeInfo->ReservedMaskSizeLinear =3D 8; > - VbeModeInfo->ReservedMaskPosLinear =3D 24; > - VbeModeInfo->MaxPixelClockHz =3D 0; > - > - ZeroMem (VbeModeInfo->Reserved, sizeof VbeModeInfo->Reserved); > - > - // > - // Clear Write Enable (bit1), keep Read Enable (bit0) set > - // > - PciWrite8 (Pam1Address, (Pam1 & ~BIT1) | BIT0); > - > - // > - // Second, point the Int10h vector at the shim. > - // > - Int0x10->Segment =3D (UINT16)((UINT32)SegmentC >> 4); > - Int0x10->Offset =3D (UINT16)((UINTN)(VbeModeInfo + 1) - SegmentC); > - > - DEBUG ((DEBUG_INFO, "%a: VBE shim installed\n", __func__)); > -} > diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.asm b/OvmfPkg/QemuVideoDxe/VbeS= him.asm > deleted file mode 100644 > index 1d284b264124..000000000000 > --- a/OvmfPkg/QemuVideoDxe/VbeShim.asm > +++ /dev/null > @@ -1,281 +0,0 @@ > -;-----------------------------------------------------------------------= ------- > -; @file > -; A minimal Int10h stub that allows the Windows 2008 R2 SP1 UEFI guest's= buggy, > -; default VGA driver to switch to 1024x768x32, on the stdvga and QXL vid= eo > -; cards of QEMU. > -; > -; Copyright (C) 2014, Red Hat, Inc. > -; Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.
> -; > -; SPDX-License-Identifier: BSD-2-Clause-Patent > -; > -;-----------------------------------------------------------------------= ------- > - > -; enable this macro for debug messages > -;%define DEBUG > - > -%macro DebugLog 1 > -%ifdef DEBUG > - push si > - mov si, %1 > - call PrintStringSi > - pop si > -%endif > -%endmacro > - > - > -BITS 16 > -ORG 0 > - > -VbeInfo: > -TIMES 256 nop > - > -VbeModeInfo: > -TIMES 256 nop > - > - > -Handler: > - cmp ax, 0x4f00 > - je GetInfo > - cmp ax, 0x4f01 > - je GetModeInfo > - cmp ax, 0x4f02 > - je SetMode > - cmp ax, 0x4f03 > - je GetMode > - cmp ax, 0x4f10 > - je GetPmCapabilities > - cmp ax, 0x4f15 > - je ReadEdid > - cmp ah, 0x00 > - je SetModeLegacy > - DebugLog StrUnknownFunction > -Hang: > - jmp Hang > - > - > -GetInfo: > - push es > - push di > - push ds > - push si > - push cx > - > - DebugLog StrEnterGetInfo > - > - ; target (es:di) set on input > - push cs > - pop ds > - mov si, VbeInfo > - ; source (ds:si) set now > - > - mov cx, 256 > - cld > - rep movsb > - > - pop cx > - pop si > - pop ds > - pop di > - pop es > - jmp Success > - > - > -GetModeInfo: > - push es > - push di > - push ds > - push si > - push cx > - > - DebugLog StrEnterGetModeInfo > - > - and cx, ~0x4000 ; clear potentially set LFB bit in mode number > - cmp cx, 0x00f1 > - je KnownMode1 > - DebugLog StrUnknownMode > - jmp Hang > -KnownMode1: > - ; target (es:di) set on input > - push cs > - pop ds > - mov si, VbeModeInfo > - ; source (ds:si) set now > - > - mov cx, 256 > - cld > - rep movsb > - > - pop cx > - pop si > - pop ds > - pop di > - pop es > - jmp Success > - > - > -%define ATT_ADDRESS_REGISTER 0x03c0 > -%define VBE_DISPI_IOPORT_INDEX 0x01ce > -%define VBE_DISPI_IOPORT_DATA 0x01d0 > - > -%define VBE_DISPI_INDEX_XRES 0x1 > -%define VBE_DISPI_INDEX_YRES 0x2 > -%define VBE_DISPI_INDEX_BPP 0x3 > -%define VBE_DISPI_INDEX_ENABLE 0x4 > -%define VBE_DISPI_INDEX_BANK 0x5 > -%define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 > -%define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 > -%define VBE_DISPI_INDEX_X_OFFSET 0x8 > -%define VBE_DISPI_INDEX_Y_OFFSET 0x9 > - > -%define VBE_DISPI_ENABLED 0x01 > -%define VBE_DISPI_LFB_ENABLED 0x40 > - > -%macro BochsWrite 2 > - push dx > - push ax > - > - mov dx, VBE_DISPI_IOPORT_INDEX > - mov ax, %1 > - out dx, ax > - > - mov dx, VBE_DISPI_IOPORT_DATA > - mov ax, %2 > - out dx, ax > - > - pop ax > - pop dx > -%endmacro > - > -SetMode: > - push dx > - push ax > - > - DebugLog StrEnterSetMode > - > - cmp bx, 0x40f1 > - je KnownMode2 > - DebugLog StrUnknownMode > - jmp Hang > -KnownMode2: > - > - ; unblank > - mov dx, ATT_ADDRESS_REGISTER > - mov al, 0x20 > - out dx, al > - > - BochsWrite VBE_DISPI_INDEX_ENABLE, 0 > - BochsWrite VBE_DISPI_INDEX_BANK, 0 > - BochsWrite VBE_DISPI_INDEX_X_OFFSET, 0 > - BochsWrite VBE_DISPI_INDEX_Y_OFFSET, 0 > - BochsWrite VBE_DISPI_INDEX_BPP, 32 > - BochsWrite VBE_DISPI_INDEX_XRES, 1024 > - BochsWrite VBE_DISPI_INDEX_VIRT_WIDTH, 1024 > - BochsWrite VBE_DISPI_INDEX_YRES, 768 > - BochsWrite VBE_DISPI_INDEX_VIRT_HEIGHT, 768 > - BochsWrite VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_E= NABLED > - > - pop ax > - pop dx > - jmp Success > - > - > -GetMode: > - DebugLog StrEnterGetMode > - mov bx, 0x40f1 > - jmp Success > - > - > -GetPmCapabilities: > - DebugLog StrGetPmCapabilities > - jmp Unsupported > - > - > -ReadEdid: > - DebugLog StrReadEdid > - jmp Unsupported > - > - > -SetModeLegacy: > - DebugLog StrEnterSetModeLegacy > - > - cmp al, 0x03 > - je KnownMode3 > - cmp al, 0x12 > - je KnownMode4 > - DebugLog StrUnknownMode > - jmp Hang > -KnownMode3: > - mov al, 0x30 > - jmp SetModeLegacyDone > -KnownMode4: > - mov al, 0x20 > -SetModeLegacyDone: > - DebugLog StrExitSuccess > - iret > - > - > -Success: > - DebugLog StrExitSuccess > - mov ax, 0x004f > - iret > - > - > -Unsupported: > - DebugLog StrExitUnsupported > - mov ax, 0x014f > - iret > - > - > -%ifdef DEBUG > -PrintStringSi: > - pusha > - push ds ; save original > - push cs > - pop ds > - mov dx, 0x0402 > -PrintStringSiLoop: > - lodsb > - cmp al, 0 > - je PrintStringSiDone > - out dx, al > - jmp PrintStringSiLoop > -PrintStringSiDone: > - pop ds ; restore original > - popa > - ret > - > - > -StrExitSuccess: > - db 'Exit', 0x0a, 0 > - > -StrExitUnsupported: > - db 'Unsupported', 0x0a, 0 > - > -StrUnknownFunction: > - db 'Unknown Function', 0x0a, 0 > - > -StrEnterGetInfo: > - db 'GetInfo', 0x0a, 0 > - > -StrEnterGetModeInfo: > - db 'GetModeInfo', 0x0a, 0 > - > -StrEnterGetMode: > - db 'GetMode', 0x0a, 0 > - > -StrEnterSetMode: > - db 'SetMode', 0x0a, 0 > - > -StrEnterSetModeLegacy: > - db 'SetModeLegacy', 0x0a, 0 > - > -StrUnknownMode: > - db 'Unknown Mode', 0x0a, 0 > - > -StrGetPmCapabilities: > - db 'GetPmCapabilities', 0x0a, 0 > - > -StrReadEdid: > - db 'ReadEdid', 0x0a, 0 > -%endif > diff --git a/OvmfPkg/QemuVideoDxe/VbeShim.sh b/OvmfPkg/QemuVideoDxe/VbeSh= im.sh > deleted file mode 100755 > index 7a0095a813cf..000000000000 > --- a/OvmfPkg/QemuVideoDxe/VbeShim.sh > +++ /dev/null > @@ -1,82 +0,0 @@ > -#!/bin/sh > -### > -# @file > -# Shell script to assemble and dump the fake Int10h handler from NASM so= urce to > -# a C array. > -# > -# Copyright (C) 2014, Red Hat, Inc. > -# Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.
> -# > -# SPDX-License-Identifier: BSD-2-Clause-Patent > -# > -### > - > -set -e -u > - > -STEM=3D$(dirname -- "$0")/$(basename -- "$0" .sh) > - > -# > -# Install exit handler -- remove temporary files. > -# > -exit_handler() > -{ > - rm -f -- "$STEM".bin "$STEM".disasm "$STEM".offsets "$STEM".insns \ > - "$STEM".bytes > -} > -trap exit_handler EXIT > - > -# > -# Assemble the source file. > -# (nasm doesn't recognize the "--" end-of-options delimiter; > -# .) > -# > -nasm -o "$STEM".bin "$STEM".asm > - > -# > -# Disassemble it, in order to get a binary dump associated with the sour= ce. > -# (ndisasm doesn't recognize the "--" end-of-options delimiter; > -# .) > -# > -ndisasm "$STEM".bin >"$STEM".disasm > - > -# > -# Create three files, each with one column of the disassembly. > -# > -# The first column contains the offsets, and it starts the comment. > -# > -cut -c 1-8 -- "$STEM".disasm \ > -| sed -e 's,^, /* ,' >"$STEM".offsets > - > -# > -# The second column contains the assembly-language instructions, and it = closes > -# the comment. We first pad it to 30 characters. > -# > -cut -c 29- -- "$STEM".disasm \ > -| sed -e 's,$, ,' \ > - -e 's,^\(.\{30\}\).*$,\1 */,' >"$STEM".insns > - > -# > -# The third column contains the bytes corresponding to the instruction, > -# represented as C integer constants. First strip trailing whitespace fr= om the > -# middle column of the input disassembly, then process pairs of nibbles. > -# > -cut -c 11-28 -- "$STEM".disasm \ > -| sed -e 's, \+$,,' -e 's/\(..\)/ 0x\1,/g' >"$STEM".bytes > - > -# > -# Write the output file, recombining the columns. The output should have= CRLF > -# line endings. > -# > -{ > - printf '//\n' > - printf '// THIS FILE WAS GENERATED BY "%s". DO NOT EDIT.\n' \ > - "$(basename -- "$0")" > - printf '//\n' > - printf '#ifndef _VBE_SHIM_H_\n' > - printf '#define _VBE_SHIM_H_\n' > - printf 'STATIC CONST UINT8 mVbeShim[] =3D {\n' > - paste -d ' ' -- "$STEM".offsets "$STEM".insns "$STEM".bytes > - printf '};\n' > - printf '#endif\n' > -} \ > -| unix2dos >"$STEM".h -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115380): https://edk2.groups.io/g/devel/message/115380 Mute This Topic: https://groups.io/mt/104329097/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-