[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.