summaryrefslogtreecommitdiff
path: root/bios
diff options
context:
space:
mode:
authorIzik Eidus <ieidus@redhat.com>2009-06-11 12:39:16 +0300
committerEduardo Habkost <ehabkost@redhat.com>2009-06-15 17:36:29 -0300
commitba1d2133ec51730d74faa84803ac8573f079e528 (patch)
treea55d8abe030551b4ac314e44622e688bac71c95b /bios
parent113a0ccebd5289869e8e626272d1e64ab1b83f39 (diff)
fix unresigered vbe physical mapping as reserved memory in the bios
Hey, The vbe was not registered as reserved memory, and therefore windows was able to try to map pci devices into this address range. Thanks. >From e454420497aec9e77b0e7a1d20e101f9b4015bc2 Mon Sep 17 00:00:00 2001 From: Izik Eidus <ieidus@redhat.com> Date: Thu, 11 Jun 2009 11:08:03 -0400 Subject: [PATCH] bios: fix vbe unregistered mapping to e820. The vbe was not registered as reserved memory, and therefore windows was able to try to map pci devices into this address range. Thanks. Signed-off-by: Izik Eidus <ieidus@redhat.com> Message-ID: <4A30D0C4.3000405@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Acked-by: john cooper <john.cooper@redhat.com> Acked-by: Marcelo Tosatti <mtosatti@redhat.com> Acked-by: Avi Kivity <avi@redhat.com> Bugzilla: 504237
Diffstat (limited to 'bios')
-rw-r--r--bios/rombios.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/bios/rombios.c b/bios/rombios.c
index 146dd52a..89c5b168 100644
--- a/bios/rombios.c
+++ b/bios/rombios.c
@@ -4614,28 +4614,37 @@ ASM_END
return;
break;
case 5:
+ /* vbe physical mapping */
+ set_e820_range(ES, regs.u.r16.di, 0xc0000000,
+ 0xc1000000, 0, 0, 2);
+ regs.u.r32.ebx = 6;
+ regs.u.r32.eax = 0x534D4150;
+ regs.u.r32.ecx = 0x14;
+ CLEAR_CF();
+ return;
+ case 6:
/* 4 pages before the bios, 3 pages for vmx tss pages,
* the other page for EPT real mode pagetable */
set_e820_range(ES, regs.u.r16.di, 0xfffbc000L,
0xfffc0000L, 0, 0, 2);
- regs.u.r32.ebx = 6;
+ regs.u.r32.ebx = 7;
regs.u.r32.eax = 0x534D4150;
regs.u.r32.ecx = 0x14;
CLEAR_CF();
return;
- case 6:
+ case 7:
/* 256KB BIOS area at the end of 4 GB */
set_e820_range(ES, regs.u.r16.di,
0xfffc0000L, 0x00000000L ,0, 0, 2);
if (extra_highbits_memory_size || extra_lowbits_memory_size)
- regs.u.r32.ebx = 7;
+ regs.u.r32.ebx = 8;
else
regs.u.r32.ebx = 0;
regs.u.r32.eax = 0x534D4150;
regs.u.r32.ecx = 0x14;
CLEAR_CF();
return;
- case 7:
+ case 8:
/* Maping of memory above 4 GB */
set_e820_range(ES, regs.u.r16.di, 0x00000000L,
extra_lowbits_memory_size, 1, extra_highbits_memory_size