mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86: drop use of E801 memory "map" (and alike)
ACPI mandates use of E820 (or newer, e.g. EFI), and in fact firmware has been observed to include E820_ACPI ranges in what E801 reports as available (really "configured") memory. Since all 64-bit systems ought to support ACPI, drop our use of older BIOS and boot loader interfaces. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
1977cd74ff
commit
925fdb0870
3 files changed
+4
-64
No files matched your search
+4
-41
@@ -4,8 +4,6 @@
|
||||
#define E820_BIOS_MAX 128
|
||||
|
||||
get_memory_map:
|
||||
|
||||
.Lmeme820:
|
||||
xorl %ebx, %ebx # continuation counter
|
||||
movw $bootsym(bios_e820map), %di # point into the whitelist
|
||||
# so we can have the bios
|
||||
@@ -17,14 +15,14 @@ get_memory_map:
|
||||
pushw %ds # data record.
|
||||
popw %es
|
||||
int $0x15
|
||||
jc .Lmem88
|
||||
jc .Ldone
|
||||
|
||||
cmpl $SMAP,%eax # check the return is `SMAP'
|
||||
jne .Lmem88
|
||||
jne .Ldone
|
||||
|
||||
incw bootsym(bios_e820nr)
|
||||
cmpw $E820_BIOS_MAX, bootsym(bios_e820nr) # up to this many entries
|
||||
jae .Lmem88
|
||||
jae .Ldone
|
||||
|
||||
movw %di,%ax
|
||||
addw $20,%ax
|
||||
@@ -32,38 +30,7 @@ get_memory_map:
|
||||
testl %ebx,%ebx # check to see if
|
||||
jnz 1b # %ebx is set to EOF
|
||||
|
||||
.Lmem88:
|
||||
movb $0x88, %ah
|
||||
int $0x15
|
||||
movw %ax,bootsym(highmem_kb)
|
||||
|
||||
.Lmeme801:
|
||||
stc # fix to work around buggy
|
||||
xorw %cx,%cx # BIOSes which don't clear/set
|
||||
xorw %dx,%dx # carry on pass/error of
|
||||
# e801h memory size call
|
||||
# or merely pass cx,dx though
|
||||
# without changing them.
|
||||
movw $0xe801, %ax
|
||||
int $0x15
|
||||
jc .Lint12
|
||||
|
||||
testw %cx, %cx # Kludge to handle BIOSes
|
||||
jnz 1f # which report their extended
|
||||
testw %dx, %dx # memory in AX/BX rather than
|
||||
jnz 1f # CX/DX. The spec I have read
|
||||
movw %ax, %cx # seems to indicate AX/BX
|
||||
movw %bx, %dx # are more reasonable anyway...
|
||||
1: movzwl %dx, %edx
|
||||
shll $6,%edx # and go from 64k to 1k chunks
|
||||
movzwl %cx, %ecx
|
||||
addl %ecx, %edx # add in lower memory
|
||||
movl %edx,bootsym(highmem_kb) # store extended memory size
|
||||
|
||||
.Lint12:
|
||||
int $0x12
|
||||
movw %ax,bootsym(lowmem_kb)
|
||||
|
||||
.Ldone:
|
||||
ret
|
||||
|
||||
.align 4
|
||||
@@ -71,7 +38,3 @@ GLOBAL(bios_e820map)
|
||||
.fill E820_BIOS_MAX*20,1,0
|
||||
GLOBAL(bios_e820nr)
|
||||
.long 0
|
||||
GLOBAL(lowmem_kb)
|
||||
.long 0
|
||||
GLOBAL(highmem_kb)
|
||||
.long 0
|
||||
@@ -1059,28 +1059,6 @@ void __init noreturn __start_xen(unsigned long mbi_p)
|
||||
bytes += map->size + 4;
|
||||
}
|
||||
}
|
||||
else if ( bootsym(lowmem_kb) )
|
||||
{
|
||||
memmap_type = "Xen-e801";
|
||||
e820_raw.map[0].addr = 0;
|
||||
e820_raw.map[0].size = bootsym(lowmem_kb) << 10;
|
||||
e820_raw.map[0].type = E820_RAM;
|
||||
e820_raw.map[1].addr = 0x100000;
|
||||
e820_raw.map[1].size = bootsym(highmem_kb) << 10;
|
||||
e820_raw.map[1].type = E820_RAM;
|
||||
e820_raw.nr_map = 2;
|
||||
}
|
||||
else if ( mbi->flags & MBI_MEMLIMITS )
|
||||
{
|
||||
memmap_type = "Multiboot-e801";
|
||||
e820_raw.map[0].addr = 0;
|
||||
e820_raw.map[0].size = mbi->mem_lower << 10;
|
||||
e820_raw.map[0].type = E820_RAM;
|
||||
e820_raw.map[1].addr = 0x100000;
|
||||
e820_raw.map[1].size = mbi->mem_upper << 10;
|
||||
e820_raw.map[1].type = E820_RAM;
|
||||
e820_raw.nr_map = 2;
|
||||
}
|
||||
else
|
||||
panic("Bootloader provided no memory information\n");
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@ extern struct e820map e820;
|
||||
extern struct e820map e820_raw;
|
||||
|
||||
/* These symbols live in the boot trampoline. */
|
||||
extern unsigned int lowmem_kb, highmem_kb;
|
||||
extern struct e820map bios_e820map[];
|
||||
extern unsigned int bios_e820nr;
|
||||
|
||||
|
||||