33
33
#include <grub/command.h>
34
34
#include <grub/gzio.h>
35
35
#include <grub/i18n.h>
36
#include <grub/bitmap_scale.h>
38
#define min(a,b) (((a) < (b)) ? (a) : (b))
39
#define max(a,b) (((a) > (b)) ? (a) : (b))
41
#define DEFAULT_VIDEO_MODE "auto"
37
43
char grub_xnu_cmdline[1024];
38
44
grub_uint32_t grub_xnu_heap_will_be_at;
847
/* Setup video for xnu. */
849
grub_xnu_set_video (struct grub_xnu_boot_params *params)
851
struct grub_video_mode_info mode_info;
857
struct grub_video_bitmap *bitmap = NULL;
859
modevar = grub_env_get ("gfxpayload");
860
/* Consider only graphical 32-bit deep modes. */
861
if (! modevar || *modevar == 0)
862
err = grub_video_set_mode (DEFAULT_VIDEO_MODE,
863
GRUB_VIDEO_MODE_TYPE_PURE_TEXT
864
| GRUB_VIDEO_MODE_TYPE_DEPTH_MASK,
865
32 << GRUB_VIDEO_MODE_TYPE_DEPTH_POS);
868
tmp = grub_xasprintf ("%s;" DEFAULT_VIDEO_MODE, modevar);
871
err = grub_video_set_mode (tmp,
872
GRUB_VIDEO_MODE_TYPE_PURE_TEXT
873
| GRUB_VIDEO_MODE_TYPE_DEPTH_MASK,
874
32 << GRUB_VIDEO_MODE_TYPE_DEPTH_POS);
881
ret = grub_video_get_info (&mode_info);
883
return grub_error (GRUB_ERR_IO, "couldn't retrieve video parameters");
887
if (grub_xnu_bitmap_mode == GRUB_XNU_BITMAP_STRETCH)
888
err = grub_video_bitmap_create_scaled (&bitmap,
892
GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST);
894
bitmap = grub_xnu_bitmap;
901
x = mode_info.width - bitmap->mode_info.width;
903
y = mode_info.height - bitmap->mode_info.height;
905
err = grub_video_blit_bitmap (bitmap,
906
GRUB_VIDEO_BLIT_REPLACE,
911
min (bitmap->mode_info.width,
913
min (bitmap->mode_info.height,
919
grub_errno = GRUB_ERR_NONE;
923
ret = grub_video_get_info_and_fini (&mode_info, &framebuffer);
925
return grub_error (GRUB_ERR_IO, "couldn't retrieve video parameters");
927
params->lfb_width = mode_info.width;
928
params->lfb_height = mode_info.height;
929
params->lfb_depth = mode_info.bpp;
930
params->lfb_line_len = mode_info.pitch;
932
params->lfb_base = PTR_TO_UINT32 (framebuffer);
933
params->lfb_mode = bitmap ? GRUB_XNU_VIDEO_SPLASH
934
: GRUB_XNU_VIDEO_TEXT_IN_VIDEO;
936
return GRUB_ERR_NONE;
843
941
grub_xnu_boot (void)