]> git.proxmox.com Git - grub2.git/commitdiff
merge mainline up to r2075 (videomask merge)
authorColin Watson <cjwatson@ubuntu.com>
Sat, 12 Jun 2010 10:30:11 +0000 (11:30 +0100)
committerColin Watson <cjwatson@ubuntu.com>
Sat, 12 Jun 2010 10:30:11 +0000 (11:30 +0100)
1  2 
conf/i386-efi.rmk
conf/i386-pc.rmk
conf/x86_64-efi.rmk
loader/i386/efi/linux.c
loader/i386/xnu.c

Simple merge
Simple merge
Simple merge
index 5870edb4ba7f80a2f3e4623acbd3ef76a3a8e6e5,1abcc06dbcf0fcc0df6c99b3074d56b758be4e3c..a4bf7f9119790fbfebb7d7d4b62868aa6210b835
  #include <grub/cpu/linux.h>
  #include <grub/efi/api.h>
  #include <grub/efi/efi.h>
 -#include <grub/efi/uga_draw.h>
 -#include <grub/pci.h>
  #include <grub/command.h>
  #include <grub/memory.h>
 +#include <grub/env.h>
 +#include <grub/video.h>
 +#include <grub/time.h>
+ #include <grub/i18n.h>
  
  #define GRUB_LINUX_CL_OFFSET          0x1000
  #define GRUB_LINUX_CL_END_OFFSET      0x2000
index 0b307ae53abf25e80f40671bd9c9e4871e5442e4,23a8a6f7b65b0c4b0c82a0f572b79e0d55fc47f8..3de6e47d47a7ab56cecafed79c453ef3ce0eed83
  #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;
@@@ -837,87 -833,9 +838,87 @@@ grub_xnu_boot_resume (void
    state.eax = grub_xnu_arg1;
  
    return grub_relocator32_boot (grub_xnu_heap_start, grub_xnu_heap_will_be_at,
-                               state);  
+                               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)