]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/i386/pc/mmap.c (grub_get_conv_memsize): New function.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 10 Jan 2011 16:51:06 +0000 (17:51 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 10 Jan 2011 16:51:06 +0000 (17:51 +0100)
(grub_machine_mmap_iterate): Take low memory into account

ChangeLog
grub-core/kern/i386/pc/mmap.c

index 12927d0f2c64ca1846bb3f7e04b490f2769043b7..34703b81d2800c11469f9fac69bed5432a1b48ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-10  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/i386/pc/mmap.c (grub_get_conv_memsize): New function.
+       (grub_machine_mmap_iterate): Take low memory into account
+
 2011-01-10  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/btrfs.c (grub_btrfs_mount): Transform out of range into
index a305d45113b9afa92bb70dd597fbade950a2078b..480ffa9494545ab586ea1bb9ced40ddaabea986a 100644 (file)
@@ -36,6 +36,22 @@ struct grub_machine_mmap_entry
 } __attribute__((packed));
 
 
+/*
+ *
+ * grub_get_conv_memsize(i) :  return the conventional memory size in KB.
+ *     BIOS call "INT 12H" to get conventional memory size
+ *      The return value in AX.
+ */
+static inline grub_uint16_t
+grub_get_conv_memsize (void)
+{
+  struct grub_bios_int_registers regs;
+
+  regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
+  grub_bios_interrupt (0x12, &regs);
+  return regs.eax & 0xffff;
+}
+
 /*
  * grub_get_ext_memsize() :  return the extended memory size in KB.
  *     BIOS call "INT 15H, AH=88H" to get extended memory size
@@ -155,6 +171,10 @@ grub_machine_mmap_iterate (grub_memory_hook_t hook)
     {
       grub_uint32_t eisa_mmap = grub_get_eisa_mmap ();
 
+      if (hook (0x0, ((grub_uint32_t) grub_get_conv_memsize ()) << 10,
+               GRUB_MEMORY_AVAILABLE))
+       return 0;
+
       if (eisa_mmap)
        {
          if (hook (0x100000, (eisa_mmap & 0xFFFF) << 10,
@@ -162,7 +182,8 @@ grub_machine_mmap_iterate (grub_memory_hook_t hook)
            hook (0x1000000, eisa_mmap & ~0xFFFF, GRUB_MEMORY_AVAILABLE);
        }
       else
-       hook (0x100000, grub_get_ext_memsize () << 10, GRUB_MEMORY_AVAILABLE);
+       hook (0x100000, ((grub_uint32_t) grub_get_ext_memsize ()) << 10,
+             GRUB_MEMORY_AVAILABLE);
     }
 
   return 0;