From 7e99e9bff5c6d7e829f32422ebf3ae56848d079c Mon Sep 17 00:00:00 2001 From: Mintsuki Date: Mon, 16 Jun 2025 02:07:51 +0200 Subject: [PATCH] Do not run Legacy16DispatchOprom for VGA OpROM if one isn't present --- src/csmwrap.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/csmwrap.c b/src/csmwrap.c index d322387..4789536 100644 --- a/src/csmwrap.c +++ b/src/csmwrap.c @@ -260,15 +260,17 @@ EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) NULL, 0); - memset(&Regs, 0, sizeof(EFI_IA32_REGISTER_SET)); - Regs.X.AX = Legacy16DispatchOprom; - Regs.X.ES = EFI_SEGMENT(&priv.low_stub->vga_oprom_table); - Regs.X.BX = EFI_OFFSET(&priv.low_stub->vga_oprom_table); - LegacyBiosFarCall86(priv.csm_efi_table->Compatibility16CallSegment, - priv.csm_efi_table->Compatibility16CallOffset, - &Regs, - NULL, - 0); + if (priv.video_type == CSMWRAP_VIDEO_OPROM) { + memset(&Regs, 0, sizeof(EFI_IA32_REGISTER_SET)); + Regs.X.AX = Legacy16DispatchOprom; + Regs.X.ES = EFI_SEGMENT(&priv.low_stub->vga_oprom_table); + Regs.X.BX = EFI_OFFSET(&priv.low_stub->vga_oprom_table); + LegacyBiosFarCall86(priv.csm_efi_table->Compatibility16CallSegment, + priv.csm_efi_table->Compatibility16CallOffset, + &Regs, + NULL, + 0); + } memset(&Regs, 0, sizeof(EFI_IA32_REGISTER_SET)); Regs.X.AX = Legacy16PrepareToBoot;