]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
merge efigfx into newreloc
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 13 Jan 2010 13:12:24 +0000 (14:12 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Wed, 13 Jan 2010 13:12:24 +0000 (14:12 +0100)
13 files changed:
1  2 
commands/videotest.c
conf/i386-efi.rmk
conf/i386-pc.rmk
conf/x86_64-efi.rmk
include/grub/i386/xnu.h
include/grub/video.h
loader/i386/linux.c
loader/i386/xnu.c
term/gfxterm.c
video/efi_gop.c
video/efi_uga.c
video/i386/pc/vbe.c
video/video.c

Simple merge
Simple merge
Simple merge
Simple merge
index d3ac5ba0cd9e6cadf1d1c76fbb14d39f4135833b,2fa2639c1311cd8e928d4c4f02aacd655f4e6386..386c8b9e07af33d84f7fe2e0491687e9e967590c
@@@ -114,7 -114,6 +114,5 @@@ extern grub_uint32_t grub_xnu_stack
  extern grub_uint32_t grub_xnu_arg1;
  extern char grub_xnu_cmdline[1024];
  grub_err_t grub_xnu_boot (void);
- grub_err_t grub_xnu_set_video (struct grub_xnu_boot_params *bootparams_relloc);
- grub_err_t
- grub_cpu_xnu_fill_devicetree (void);
+ grub_err_t grub_cpu_xnu_fill_devicetree (void);
 -extern grub_uint32_t grub_xnu_heap_will_be_at;
  #endif
index 985fa9208c71e687cfa1ab931adafa24c3372859,53fe67c4e42393402345e7763e3efa9fee874289..fb0151878574b2f253594f20859404ee7807481b
@@@ -316,8 -307,14 +316,17 @@@ grub_err_t grub_video_set_active_render
  grub_err_t grub_video_get_active_render_target (struct grub_video_render_target **target);
  
  grub_err_t grub_video_set_mode (const char *modestring,
-                               int NESTED_FUNC_ATTR (*hook) (grub_video_adapter_t p,
-                                                             struct grub_video_mode_info *mode_info));
- grub_video_driver_id_t grub_video_get_driver_id (void);
+                               unsigned int modemask,
+                               unsigned int modevalue);
+ static inline int
+ grub_video_check_mode_flag (unsigned int flags, unsigned int mask,
+                           unsigned int flag, int def)
+ {
+   return (flag & mask) ? !! (flags & flag) : def;
+ }
++grub_video_driver_id_t
++grub_video_get_driver_id (void);
 +
  #endif /* ! GRUB_VIDEO_HEADER */
index 691d0912d452068b742d62dbdca532f8e9db2f4d,2434df6095137d2794cb7e5b8cd02444e81e89dd..9fdf9b4458c2f919772bc4f726ee80ed53a80430
@@@ -593,15 -518,15 +593,15 @@@ grub_linux_boot (void
    if (modevar && *modevar != 0)
      {
        tmp = grub_malloc (grub_strlen (modevar)
 -                       + sizeof (";text"));
 +                       + sizeof (";" DEFAULT_VIDEO_MODE));
        if (! tmp)
        return grub_errno;
 -      grub_sprintf (tmp, "%s;text", modevar);
 +      grub_sprintf (tmp, "%s;" DEFAULT_VIDEO_MODE, modevar);
-       err = grub_video_set_mode (tmp, 0);
+       err = grub_video_set_mode (tmp, 0, 0);
        grub_free (tmp);
      }
    else
-     err = grub_video_set_mode (DEFAULT_VIDEO_MODE, 0);
 -    err = grub_video_set_mode ("text", 0, 0);
++    err = grub_video_set_mode (DEFAULT_VIDEO_MODE, 0, 0);
  
    if (err)
      {
index ce520bcde492a40533cb512942f38242c8781526,0b307ae53abf25e80f40671bd9c9e4871e5442e4..a39f2bc7d4943df74ddaca69c7e6e1b7a27dc0ee
  #include <grub/term.h>
  #include <grub/command.h>
  #include <grub/gzio.h>
 +#include <grub/i18n.h>
  
+ #define min(a,b) (((a) < (b)) ? (a) : (b))
+ #define max(a,b) (((a) > (b)) ? (a) : (b))
+ #define DEFAULT_VIDEO_MODE "auto"
  char grub_xnu_cmdline[1024];
 -grub_uint32_t grub_xnu_heap_will_be_at;
  grub_uint32_t grub_xnu_entry_point, grub_xnu_arg1, grub_xnu_stack;
  
  /* Aliases set for some tables. */
@@@ -831,9 -836,88 +836,87 @@@ grub_xnu_boot_resume (void
    state.eip = grub_xnu_entry_point;
    state.eax = grub_xnu_arg1;
  
 -  return grub_relocator32_boot (grub_xnu_heap_start, grub_xnu_heap_will_be_at,
 -                              state);  
 +  return grub_relocator32_boot (grub_xnu_relocator, state); 
  }
  
+ /* Setup video for xnu. */
+ static grub_err_t
+ grub_xnu_set_video (struct grub_xnu_boot_params *params)
+ {
+   struct grub_video_mode_info mode_info;
+   int ret;
+   char *tmp, *modevar;
+   void *framebuffer;
+   grub_err_t err;
+   modevar = grub_env_get ("gfxpayload");
+   /* Consider only graphical 32-bit deep modes.  */
+   if (! modevar || *modevar == 0)
+     err = grub_video_set_mode (DEFAULT_VIDEO_MODE,
+                              GRUB_VIDEO_MODE_TYPE_PURE_TEXT
+                              | GRUB_VIDEO_MODE_TYPE_DEPTH_MASK,
+                              32 << GRUB_VIDEO_MODE_TYPE_DEPTH_POS);
+   else
+     {
+       tmp = grub_malloc (grub_strlen (modevar)
+                        + sizeof (DEFAULT_VIDEO_MODE) + 1);
+       if (! tmp)
+       return grub_error (GRUB_ERR_OUT_OF_MEMORY,
+                          "couldn't allocate temporary storag");
+       grub_sprintf (tmp, "%s;" DEFAULT_VIDEO_MODE, modevar);
+       err = grub_video_set_mode (tmp,
+                                GRUB_VIDEO_MODE_TYPE_PURE_TEXT
+                                | GRUB_VIDEO_MODE_TYPE_DEPTH_MASK,
+                                32 << GRUB_VIDEO_MODE_TYPE_DEPTH_POS);
+       grub_free (tmp);
+     }
+   if (err)
+     return err;
+   if (grub_xnu_bitmap)
+     {
+       int x, y;
+       x = mode_info.width - grub_xnu_bitmap->mode_info.width;
+       x /= 2;
+       y = mode_info.height - grub_xnu_bitmap->mode_info.height;
+       y /= 2;
+       err = grub_video_blit_bitmap (grub_xnu_bitmap,
+                                   GRUB_VIDEO_BLIT_REPLACE,
+                                   x > 0 ? x : 0,
+                                   y > 0 ? y : 0,
+                                   x < 0 ? -x : 0,
+                                   y < 0 ? -y : 0,
+                                   min (grub_xnu_bitmap->mode_info.width,
+                                        mode_info.width),
+                                   min (grub_xnu_bitmap->mode_info.height,
+                                        mode_info.height));
+       if (err)
+       {
+         grub_print_error ();
+         grub_errno = GRUB_ERR_NONE;
+         grub_xnu_bitmap = 0;
+       }
+       err = GRUB_ERR_NONE;
+     }
+   ret = grub_video_get_info_and_fini (&mode_info, &framebuffer);
+   if (ret)
+     return grub_error (GRUB_ERR_IO, "couldn't retrieve video parameters");
+   params->lfb_width = mode_info.width;
+   params->lfb_height = mode_info.height;
+   params->lfb_depth = mode_info.bpp;
+   params->lfb_line_len = mode_info.pitch;
+   params->lfb_base = PTR_TO_UINT32 (framebuffer);
+   params->lfb_mode = grub_xnu_bitmap
+     ? GRUB_XNU_VIDEO_SPLASH : GRUB_XNU_VIDEO_TEXT_IN_VIDEO;
+   return GRUB_ERR_NONE;
+ }
  /* Boot xnu. */
  grub_err_t
  grub_xnu_boot (void)
diff --cc term/gfxterm.c
Simple merge
diff --cc video/efi_gop.c
Simple merge
diff --cc video/efi_uga.c
Simple merge
Simple merge
diff --cc video/video.c
Simple merge