]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Add VBE PM interface
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 15 Sep 2010 22:37:30 +0000 (00:37 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 15 Sep 2010 22:37:30 +0000 (00:37 +0200)
grub-core/loader/i386/multiboot_mbi.c
grub-core/video/i386/pc/vbe.c
include/grub/i386/pc/vbe.h

index aa2c4a2021669efb34017cd642818702ad9036e4..8411c7ec6ca113a3162c30623d7022adf339a4da 100644 (file)
@@ -289,10 +289,9 @@ fill_vbe_info (struct multiboot_info *mbi, grub_uint8_t *ptrorig,
   ptrorig += sizeof (struct grub_vbe_mode_info_block);
   ptrdest += sizeof (struct grub_vbe_mode_info_block);
       
-  /* FIXME: retrieve those.  */
-  mbi->vbe_interface_seg = 0;
-  mbi->vbe_interface_off = 0;
-  mbi->vbe_interface_len = 0;
+  grub_vbe_bios_get_pm_interface (&mbi->vbe_interface_seg,
+                                 &mbi->vbe_interface_off,
+                                 &mbi->vbe_interface_len);
   
   mbi->flags |= MULTIBOOT_INFO_VBE_INFO;
 
index 4bb46e4cdfb7bf2c5076ffd9dd5c53cfa9375108..2ddb4ca8085be47bd811446b0a57380820500adb 100644 (file)
@@ -248,6 +248,32 @@ grub_vbe_bios_get_display_start (grub_uint32_t *x,
   return regs.eax & 0xffff;
 }
 
+/* Call VESA BIOS 0x4f0a.  */
+grub_vbe_status_t 
+grub_vbe_bios_get_pm_interface (grub_uint16_t *segment, grub_uint16_t *offset,
+                               grub_uint16_t *length)
+{
+  struct grub_bios_int_registers regs;
+
+  regs.eax = 0x4f0a;
+  regs.ebx = 0x0000;
+  regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
+  grub_bios_interrupt (0x10, &regs);
+
+  if ((regs.eax & 0xffff) != GRUB_VBE_STATUS_OK)
+    {
+      *segment = 0;
+      *offset = 0;
+      *length = 0;
+    }
+
+  *segment = regs.es & 0xffff;
+  *offset = regs.edi & 0xffff;
+  *length = regs.ecx & 0xffff;
+  return regs.eax & 0xffff;
+}
+
+
 grub_err_t
 grub_vbe_probe (struct grub_vbe_info_block *info_block)
 {
index 9b05c22998f64d62f0e0ad61501cd0a2c68bf362..fba3ee642fae91f95e1881bc220c932cf9fcd04b 100644 (file)
@@ -209,6 +209,9 @@ grub_err_t grub_vbe_set_video_mode (grub_uint32_t mode,
 grub_err_t grub_vbe_get_video_mode (grub_uint32_t *mode);
 grub_err_t grub_vbe_get_video_mode_info (grub_uint32_t mode,
                                          struct grub_vbe_mode_info_block *mode_info);
+grub_vbe_status_t 
+grub_vbe_bios_get_pm_interface (grub_uint16_t *seg, grub_uint16_t *offset,
+                               grub_uint16_t *length);
 
 
 #endif /* ! GRUB_VBE_MACHINE_HEADER */