[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [Patch] [1/2] replace e820 from 0xe0000 to oxeb000
Hi, This patch replaces e820 from 0xe0000 to oxeb000. Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx> Best Regards, Akio Takebe diff -r e2f36d066b7b tools/firmware/hvmloader/config.h --- a/tools/firmware/hvmloader/config.h Mon Dec 22 13:48:40 2008 +0000 +++ b/tools/firmware/hvmloader/config.h Mon Jan 05 22:55:35 2009 +0900 @@ -26,6 +26,7 @@ #define SMBIOS_PHYSICAL_ADDRESS 0x000E9000 #define SMBIOS_MAXIMUM_SIZE 0x00001000 #define ACPI_PHYSICAL_ADDRESS 0x000EA000 +#define E820_PHYSICAL_ADDRESS 0x000EB000 #define ROMBIOS_PHYSICAL_ADDRESS 0x000F0000 #define SCRATCH_PHYSICAL_ADDRESS 0x00010000 diff -r e2f36d066b7b tools/firmware/rombios/rombios.c --- a/tools/firmware/rombios/rombios.c Mon Dec 22 13:48:40 2008 +0000 +++ b/tools/firmware/rombios/rombios.c Mon Jan 05 22:55:35 2009 +0900 @@ -1409,10 +1409,11 @@ { Bit8u nr_entries = read_byte(0x9000, 0x1e8); Bit32u base_mem; + Bit16u e820_seg=E820_PHYSICAL_ADDRESS>>4; if (nr_entries > 32) nr_entries = 32; - write_word(0xe000, 0x8, nr_entries); - memcpyb(0xe000, 0x10, 0x9000, 0x2d0, nr_entries * 0x14); + write_word(e820_seg, 0x8, nr_entries); + memcpyb(e820_seg, 0x10, 0x9000, 0x2d0, nr_entries * 0x14); /* Report the proper base memory size at address 0x0413: otherwise * non-e820 code will clobber things if BASE_MEM_IN_K is bigger than * the first e820 entry. Get the size by reading the second 64bit @@ -4669,7 +4670,8 @@ { #ifdef HVMASSIST case 0x20: { - Bit16u e820_table_size = read_word(0xe000, 0x8) * 0x14; + Bit16u e820_seg=E820_PHYSICAL_ADDRESS>>4; + Bit16u e820_table_size = read_word(e820_seg, 0x8) * 0x14; if (regs.u.r32.edx != 0x534D4150) /* SMAP */ goto int15_unimplemented; @@ -4677,7 +4679,7 @@ if ((regs.u.r16.bx / 0x14) * 0x14 == regs.u.r16.bx) { if (regs.u.r16.bx + 0x14 <= e820_table_size) memcpyb(ES, regs.u.r16.di, - 0xe000, 0x10 + regs.u.r16.bx, 0x14); + e820_seg, 0x10 + regs.u.r16.bx, 0x14); regs.u.r32.ebx += 0x14; if ((regs.u.r32.ebx + 0x14 - 1) > e820_table_size) regs.u.r32.ebx = 0; @@ -4685,8 +4687,8 @@ Bit32u base, type; Bit16u off; for (off = 0; off < e820_table_size; off += 0x14) { - base = read_dword(0xe000, 0x10 + off); - type = read_dword(0xe000, 0x20 + off); + base = read_dword(e820_seg, 0x10 + off); + type = read_dword(e820_seg, 0x20 + off); if ((base >= 0x100000) && (type == 1)) break; } @@ -4694,7 +4696,7 @@ SET_CF(); break; } - memcpyb(ES, regs.u.r16.di, 0xe000, 0x10 + off, 0x14); + memcpyb(ES, regs.u.r16.di, e820_seg, 0x10 + off, 0x14); regs.u.r32.ebx = 0; } else { /* AX=E820, DX=534D4150, BX unrecognized */ goto int15_unimplemented; @@ -4707,7 +4709,8 @@ } case 0x01: { - Bit16u off, e820_table_size = read_word(0xe000, 0x8) * 0x14; + Bit16u e820_seg=E820_PHYSICAL_ADDRESS>>4; + Bit16u off, e820_table_size = read_word(e820_seg, 0x8) * 0x14; Bit32u base, type, size; // do we have any reason to fail here ? @@ -4723,8 +4726,8 @@ // Find first RAM E820 entry >= 1MB. for (off = 0; off < e820_table_size; off += 0x14) { - base = read_dword(0xe000, 0x10 + off); - type = read_dword(0xe000, 0x20 + off); + base = read_dword(e820_seg, 0x10 + off); + type = read_dword(e820_seg, 0x20 + off); if ((base >= 0x100000) && (type == 1)) break; } @@ -4732,7 +4735,7 @@ // If there is RAM above 16MB, return amount in 64kB chunks. regs.u.r16.dx = 0; if (off != e820_table_size) { - size = base + read_dword(0xe000, 0x18 + off); + size = base + read_dword(e820_seg, 0x18 + off); if (size > 0x1000000) { size -= 0x1000000; regs.u.r16.dx = (Bit16u)(size >> 16); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |