diff options
author | Izik Eidus <ieidus@redhat.com> | 2009-06-11 12:39:16 +0300 |
---|---|---|
committer | Eduardo Habkost <ehabkost@redhat.com> | 2009-06-15 17:36:29 -0300 |
commit | ba1d2133ec51730d74faa84803ac8573f079e528 (patch) | |
tree | a55d8abe030551b4ac314e44622e688bac71c95b /bios | |
parent | 113a0ccebd5289869e8e626272d1e64ab1b83f39 (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.c | 17 |
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 |