]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/Csm/LegacyBiosDxe/LegacyBootSupport.c
OvmfPkg/Csm/LegacyBiosDxe: Fix Legacy16GetTableAddress call for E820 data
[mirror_edk2.git] / OvmfPkg / Csm / LegacyBiosDxe / LegacyBootSupport.c
index 211750c0123b936a38b9895efaa0a156118b0838..cd4cd24f4246ff51b673e8b0fca92a3b408b544e 100644 (file)
@@ -928,7 +928,9 @@ GenericLegacyBoot (
   if (CopySize > Private->Legacy16Table->E820Length) {\r
     ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET));\r
     Regs.X.AX = Legacy16GetTableAddress;\r
+    Regs.X.BX = (UINT16) 0x0; // Any region\r
     Regs.X.CX = (UINT16) CopySize;\r
+    Regs.X.DX = (UINT16) 0x4; // Alignment\r
     Private->LegacyBios.FarCall86 (\r
       &Private->LegacyBios,\r
       Private->Legacy16Table->Compatibility16CallSegment,\r
@@ -942,6 +944,7 @@ GenericLegacyBoot (
     Private->Legacy16Table->E820Length  = (UINT32) CopySize;\r
     if (Regs.X.AX != 0) {\r
       DEBUG ((EFI_D_ERROR, "Legacy16 E820 length insufficient\n"));\r
+      return EFI_OUT_OF_RESOURCES;\r
     } else {\r
       CopyMem (\r
         (VOID *)(UINTN) Private->Legacy16Table->E820Pointer,\r