qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 04/14] pcbios: make set_e820_range() full 64bit awar


From: Isaku Yamahata
Subject: [Qemu-devel] [PATCH 04/14] pcbios: make set_e820_range() full 64bit aware.
Date: Wed, 30 Sep 2009 19:18:39 +0900

This patch makes e820 can return full 64bit value
instead of 40 bits.
This patch is preparation to make e820 cover PCIe MMCONFIG area
which is 64bit address in general.

Signed-off-by: Isaku Yamahata <address@hidden>
---
 rombios.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/rombios.c b/rombios.c
index 560e6d5..6efd5d7 100644
--- a/rombios.c
+++ b/rombios.c
@@ -4466,21 +4466,21 @@ void set_e820_range(ES, DI, start, end, extra_start, 
extra_end, type)
      Bit16u DI;
      Bit32u start;
      Bit32u end;
-     Bit8u extra_start;
-     Bit8u extra_end;
+     Bit32u extra_start;
+     Bit32u extra_end;
      Bit16u type;
 {
     write_word(ES, DI, start);
     write_word(ES, DI+2, start >> 16);
     write_word(ES, DI+4, extra_start);
-    write_word(ES, DI+6, 0x00);
+    write_word(ES, DI+6, extra_start >> 16);
 
     end -= start;
     extra_end -= extra_start;
     write_word(ES, DI+8, end);
     write_word(ES, DI+10, end >> 16);
     write_word(ES, DI+12, extra_end);
-    write_word(ES, DI+14, 0x0000);
+    write_word(ES, DI+14, extra_end >> 16);
 
     write_word(ES, DI+16, type);
     write_word(ES, DI+18, 0x0);
@@ -4494,7 +4494,7 @@ int15_function32(regs, ES, DS, FLAGS)
   Bit32u  extended_memory_size=0; // 64bits long
   Bit32u  extra_lowbits_memory_size=0;
   Bit16u  CX,DX;
-  Bit8u   extra_highbits_memory_size=0;
+  Bit32u   extra_highbits_memory_size=0;
 
 BX_DEBUG_INT15("int15 AX=%04x\n",regs.u.r16.ax);
 
@@ -4579,42 +4579,42 @@ ASM_END
                 {
                     case 0:
                         set_e820_range(ES, regs.u.r16.di,
-                                       0x0000000L, 0x0009f000L, 0, 0, 1);
+                                       0x0000000L, 0x0009f000L, 0L, 0L, 1);
                         regs.u.r32.ebx = 1;
                         break;
                     case 1:
                         set_e820_range(ES, regs.u.r16.di,
-                                       0x0009f000L, 0x000a0000L, 0, 0, 2);
+                                       0x0009f000L, 0x000a0000L, 0L, 0L, 2);
                         regs.u.r32.ebx = 2;
                         break;
                     case 2:
                         set_e820_range(ES, regs.u.r16.di,
-                                       0x000e8000L, 0x00100000L, 0, 0, 2);
+                                       0x000e8000L, 0x00100000L, 0L, 0L, 2);
                         regs.u.r32.ebx = 3;
                         break;
                     case 3:
 #if BX_ROMBIOS32
                         set_e820_range(ES, regs.u.r16.di,
                                        0x00100000L,
-                                       extended_memory_size - ACPI_DATA_SIZE 
,0, 0, 1);
+                                       extended_memory_size - ACPI_DATA_SIZE 
,0L, 0L, 1);
                         regs.u.r32.ebx = 4;
 #else
                         set_e820_range(ES, regs.u.r16.di,
                                        0x00100000L,
-                                       extended_memory_size, 1);
+                                       extended_memory_size, 0L, 0L, 1);
                         regs.u.r32.ebx = 5;
 #endif
                         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
+                                       extended_memory_size ,0L, 0L, 3); // 
ACPI RAM
                         regs.u.r32.ebx = 5;
                         break;
                     case 5:
                         /* 256KB BIOS area at the end of 4 GB */
                         set_e820_range(ES, regs.u.r16.di,
-                                       0xfffc0000L, 0x00000000L ,0, 0, 2);
+                                       0xfffc0000L, 0x00000000L ,0L, 0L, 2);
                         if (extra_highbits_memory_size || 
extra_lowbits_memory_size)
                             regs.u.r32.ebx = 6;
                         else
-- 
1.6.0.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]