aboutsummaryrefslogtreecommitdiff
path: root/kvm
diff options
context:
space:
mode:
authorsshwarts <sshwarts>2009-01-10 10:50:07 +0000
committersshwarts <sshwarts>2009-01-10 10:50:07 +0000
commitb177c9a9ce68928e1b7f646e7330b483649ba777 (patch)
tree4a13f94e4b05235c160c4163f98c88e6476e3e40 /kvm
parent- run acpi-dsdt.dsl through cpp before compiling with iasl (to support #ifdef... (diff)
downloadqemu-kvm-b177c9a9ce68928e1b7f646e7330b483649ba777.tar.gz
qemu-kvm-b177c9a9ce68928e1b7f646e7330b483649ba777.tar.bz2
qemu-kvm-b177c9a9ce68928e1b7f646e7330b483649ba777.zip
Deduplicate INT 15h, AX=E820h code by removing some identical parts.
- Sebastian
Diffstat (limited to 'kvm')
-rw-r--r--kvm/bios/rombios.c33
1 files changed, 5 insertions, 28 deletions
diff --git a/kvm/bios/rombios.c b/kvm/bios/rombios.c
index 11095c6b0..ee46e42bf 100644
--- a/kvm/bios/rombios.c
+++ b/kvm/bios/rombios.c
@@ -4562,28 +4562,16 @@ ASM_END
set_e820_range(ES, regs.u.r16.di,
0x0000000L, 0x0009f000L, 0, 0, 1);
regs.u.r32.ebx = 1;
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
break;
case 1:
set_e820_range(ES, regs.u.r16.di,
0x0009f000L, 0x000a0000L, 0, 0, 2);
regs.u.r32.ebx = 2;
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
break;
case 2:
set_e820_range(ES, regs.u.r16.di,
0x000e8000L, 0x00100000L, 0, 0, 2);
regs.u.r32.ebx = 3;
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
break;
case 3:
#if BX_ROMBIOS32
@@ -4597,20 +4585,12 @@ ASM_END
extended_memory_size, 1);
regs.u.r32.ebx = 5;
#endif
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
break;
case 4:
set_e820_range(ES, regs.u.r16.di,
extended_memory_size - ACPI_DATA_SIZE,
extended_memory_size ,0, 0, 3); // ACPI RAM
regs.u.r32.ebx = 5;
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
break;
case 5:
/* 256KB BIOS area at the end of 4 GB */
@@ -4620,24 +4600,21 @@ ASM_END
regs.u.r32.ebx = 6;
else
regs.u.r32.ebx = 0;
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
+ break;
case 6:
/* Maping of memory above 4 GB */
set_e820_range(ES, regs.u.r16.di, 0x00000000L,
extra_lowbits_memory_size, 1, extra_highbits_memory_size
+ 1, 1);
regs.u.r32.ebx = 0;
- regs.u.r32.eax = 0x534D4150;
- regs.u.r32.ecx = 0x14;
- CLEAR_CF();
- return;
+ break;
default: /* AX=E820, DX=534D4150, BX unrecognized */
goto int15_unimplemented;
break;
}
+ regs.u.r32.eax = 0x534D4150;
+ regs.u.r32.ecx = 0x14;
+ CLEAR_CF();
} else {
// if DX != 0x534D4150)
goto int15_unimplemented;