Remove VBE multiboot support
This commit is contained in:
parent
fe9381dd00
commit
f5d5c327e3
6 changed files with 34 additions and 133 deletions
|
@ -1,9 +0,0 @@
|
||||||
2010-01-14 Vladimir Serbinenko <phcoder@gmail.com>
|
|
||||||
|
|
||||||
VBE multiboot support.
|
|
||||||
|
|
||||||
* loader/i386/multiboot_mbi.c (HAS_VBE): New constant.
|
|
||||||
(grub_multiboot_get_mbi_size) [HAS_VBE]: Account for VBE structures.
|
|
||||||
(grub_multiboot_make_mbi) [HAS_VBE]: Likewise.
|
|
||||||
(fill_vbe_info) [HAS_VBE]: New function.
|
|
||||||
(retrieve_video_parameters) [HAS_VBE]: Call fill_vbe_info.
|
|
|
@ -11,7 +11,6 @@
|
||||||
(grub_get_multiboot_mmap_count): New proto.
|
(grub_get_multiboot_mmap_count): New proto.
|
||||||
(grub_fill_multiboot_mmap): Likewise.
|
(grub_fill_multiboot_mmap): Likewise.
|
||||||
(grub_multiboot_set_video_mode): Likewise.
|
(grub_multiboot_set_video_mode): Likewise.
|
||||||
(grub_multiboot_fill_vbe_info_real): Likewise.
|
|
||||||
(grub_multiboot_set_console): Likewise.
|
(grub_multiboot_set_console): Likewise.
|
||||||
(grub_multiboot_load): Likewise.
|
(grub_multiboot_load): Likewise.
|
||||||
(grub_multiboot_load_elf): Likewise.
|
(grub_multiboot_load_elf): Likewise.
|
||||||
|
@ -24,9 +23,6 @@
|
||||||
* loader/i386/multiboot_mbi.c (HAS_VGA_TEXT): Moved from here ..
|
* loader/i386/multiboot_mbi.c (HAS_VGA_TEXT): Moved from here ..
|
||||||
* include/grub/multiboot.h (GRUB_MACHINE_HAS_VGA_TEXT): ... here. All
|
* include/grub/multiboot.h (GRUB_MACHINE_HAS_VGA_TEXT): ... here. All
|
||||||
users updated.
|
users updated.
|
||||||
* loader/i386/multiboot_mbi.c (HAS_VBE): Moved from here ..
|
|
||||||
* include/grub/multiboot.h (GRUB_MACHINE_HAS_VBE): ... here. All
|
|
||||||
users updated.
|
|
||||||
* loader/i386/multiboot_mbi.c (accepts_video): Moved from here...
|
* loader/i386/multiboot_mbi.c (accepts_video): Moved from here...
|
||||||
* loader/i386/multiboot.c (accepts_video): ... here. All users updated.
|
* loader/i386/multiboot.c (accepts_video): ... here. All users updated.
|
||||||
* loader/i386/multiboot_mbi.c (grub_multiboot_set_accepts_video):
|
* loader/i386/multiboot_mbi.c (grub_multiboot_set_accepts_video):
|
||||||
|
@ -40,8 +36,4 @@
|
||||||
* loader/i386/multiboot_mbi.c (set_video_mode): Moved from here...
|
* loader/i386/multiboot_mbi.c (set_video_mode): Moved from here...
|
||||||
* loader/i386/multiboot.c (grub_multiboot_set_video_mode): ... here.
|
* loader/i386/multiboot.c (grub_multiboot_set_video_mode): ... here.
|
||||||
All users updated.
|
All users updated.
|
||||||
* loader/i386/multiboot_mbi.c (fill_vbe_info): Moved generic parts
|
|
||||||
from here...
|
|
||||||
* loader/i386/multiboot.c (grub_multiboot_fill_vbe_info_real): ... here.
|
|
||||||
All users updated.
|
|
||||||
* loader/i386/multiboot_mbi2.c: New file.
|
* loader/i386/multiboot_mbi2.c: New file.
|
||||||
|
|
|
@ -51,17 +51,8 @@ grub_err_t grub_multiboot_set_video_mode (void);
|
||||||
|
|
||||||
#if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU)
|
#if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_QEMU)
|
||||||
#include <grub/i386/pc/vbe.h>
|
#include <grub/i386/pc/vbe.h>
|
||||||
grub_err_t
|
|
||||||
grub_multiboot_fill_vbe_info_real (struct grub_vbe_info_block *vbe_control_info,
|
|
||||||
struct grub_vbe_mode_info_block *vbe_mode_info,
|
|
||||||
multiboot_uint16_t *vbe_mode,
|
|
||||||
multiboot_uint16_t *vbe_interface_seg,
|
|
||||||
multiboot_uint16_t *vbe_interface_off,
|
|
||||||
multiboot_uint16_t *vbe_interface_len);
|
|
||||||
#define GRUB_MACHINE_HAS_VBE 1
|
|
||||||
#define GRUB_MACHINE_HAS_VGA_TEXT 1
|
#define GRUB_MACHINE_HAS_VGA_TEXT 1
|
||||||
#else
|
#else
|
||||||
#define GRUB_MACHINE_HAS_VBE 0
|
|
||||||
#define GRUB_MACHINE_HAS_VGA_TEXT 0
|
#define GRUB_MACHINE_HAS_VGA_TEXT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
/*
|
/*
|
||||||
* FIXME: The following features from the Multiboot specification still
|
* FIXME: The following features from the Multiboot specification still
|
||||||
* need to be implemented:
|
* need to be implemented:
|
||||||
|
* - VBE support
|
||||||
* - symbol table
|
* - symbol table
|
||||||
* - drives table
|
* - drives table
|
||||||
* - ROM configuration table
|
* - ROM configuration table
|
||||||
|
@ -115,54 +116,6 @@ grub_multiboot_set_video_mode (void)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if GRUB_MACHINE_HAS_VBE
|
|
||||||
grub_err_t
|
|
||||||
grub_multiboot_fill_vbe_info_real (struct grub_vbe_info_block *vbe_control_info,
|
|
||||||
struct grub_vbe_mode_info_block *vbe_mode_info,
|
|
||||||
multiboot_uint16_t *vbe_mode,
|
|
||||||
multiboot_uint16_t *vbe_interface_seg,
|
|
||||||
multiboot_uint16_t *vbe_interface_off,
|
|
||||||
multiboot_uint16_t *vbe_interface_len)
|
|
||||||
{
|
|
||||||
grub_vbe_status_t status;
|
|
||||||
void *scratch = (void *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
|
|
||||||
|
|
||||||
status = grub_vbe_bios_get_controller_info (scratch);
|
|
||||||
if (status != GRUB_VBE_STATUS_OK)
|
|
||||||
return grub_error (GRUB_ERR_IO, "Can't get controller info.");
|
|
||||||
grub_memcpy (vbe_control_info, scratch, sizeof (struct grub_vbe_info_block));
|
|
||||||
|
|
||||||
status = grub_vbe_bios_get_mode (scratch);
|
|
||||||
*vbe_mode = *(grub_uint32_t *) scratch;
|
|
||||||
if (status != GRUB_VBE_STATUS_OK)
|
|
||||||
return grub_error (GRUB_ERR_IO, "can't get VBE mode");
|
|
||||||
|
|
||||||
/* get_mode_info isn't available for mode 3. */
|
|
||||||
if (*vbe_mode == 3)
|
|
||||||
{
|
|
||||||
grub_memset (vbe_mode_info, 0, sizeof (struct grub_vbe_mode_info_block));
|
|
||||||
vbe_mode_info->memory_model = GRUB_VBE_MEMORY_MODEL_TEXT;
|
|
||||||
vbe_mode_info->x_resolution = 80;
|
|
||||||
vbe_mode_info->y_resolution = 25;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = grub_vbe_bios_get_mode_info (*vbe_mode, scratch);
|
|
||||||
if (status != GRUB_VBE_STATUS_OK)
|
|
||||||
return grub_error (GRUB_ERR_IO, "can't get mode info");
|
|
||||||
grub_memcpy (vbe_mode_info, scratch,
|
|
||||||
sizeof (struct grub_vbe_mode_info_block));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: retrieve those. */
|
|
||||||
*vbe_interface_seg = 0;
|
|
||||||
*vbe_interface_off = 0;
|
|
||||||
*vbe_interface_len = 0;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_multiboot_boot (void)
|
grub_multiboot_boot (void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -186,10 +186,6 @@ grub_multiboot_get_mbi_size (void)
|
||||||
+ modcnt * sizeof (struct multiboot_mod_list) + total_modcmd
|
+ modcnt * sizeof (struct multiboot_mod_list) + total_modcmd
|
||||||
+ ALIGN_UP (sizeof(PACKAGE_STRING), 4)
|
+ ALIGN_UP (sizeof(PACKAGE_STRING), 4)
|
||||||
+ grub_get_multiboot_mmap_count () * sizeof (struct multiboot_mmap_entry)
|
+ grub_get_multiboot_mmap_count () * sizeof (struct multiboot_mmap_entry)
|
||||||
#if GRUB_MACHINE_HAS_VBE
|
|
||||||
+ sizeof (struct grub_vbe_info_block)
|
|
||||||
+ sizeof (struct grub_vbe_mode_info_block)
|
|
||||||
#endif
|
|
||||||
+ 256 * sizeof (struct multiboot_color);
|
+ 256 * sizeof (struct multiboot_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,12 +387,6 @@ grub_multiboot_make_mbi (void *orig, grub_uint32_t dest, grub_off_t buf_off,
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
#if GRUB_MACHINE_HAS_VBE
|
|
||||||
ptrorig += sizeof (struct grub_vbe_info_block);
|
|
||||||
ptrdest += sizeof (struct grub_vbe_info_block);
|
|
||||||
ptrorig += sizeof (struct grub_vbe_mode_info_block);
|
|
||||||
ptrdest += sizeof (struct grub_vbe_mode_info_block);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,10 +127,10 @@ grub_multiboot_load (grub_file_t file)
|
||||||
case MULTIBOOT_TAG_TYPE_BASIC_MEMINFO:
|
case MULTIBOOT_TAG_TYPE_BASIC_MEMINFO:
|
||||||
case MULTIBOOT_TAG_TYPE_BOOTDEV:
|
case MULTIBOOT_TAG_TYPE_BOOTDEV:
|
||||||
case MULTIBOOT_TAG_TYPE_MMAP:
|
case MULTIBOOT_TAG_TYPE_MMAP:
|
||||||
case MULTIBOOT_TAG_TYPE_VBE:
|
|
||||||
case MULTIBOOT_TAG_TYPE_FRAMEBUFFER:
|
case MULTIBOOT_TAG_TYPE_FRAMEBUFFER:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MULTIBOOT_TAG_TYPE_VBE:
|
||||||
case MULTIBOOT_TAG_TYPE_ELF_SECTIONS:
|
case MULTIBOOT_TAG_TYPE_ELF_SECTIONS:
|
||||||
case MULTIBOOT_TAG_TYPE_APM:
|
case MULTIBOOT_TAG_TYPE_APM:
|
||||||
default:
|
default:
|
||||||
|
@ -271,37 +271,6 @@ grub_multiboot_get_mbi_size (void)
|
||||||
+ sizeof (struct multiboot_tag_vbe) + MULTIBOOT_TAG_ALIGN - 1;
|
+ sizeof (struct multiboot_tag_vbe) + MULTIBOOT_TAG_ALIGN - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_HAS_VBE
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
fill_vbe_info (struct grub_vbe_mode_info_block **vbe_mode_info_out,
|
|
||||||
grub_uint8_t **ptrorig)
|
|
||||||
{
|
|
||||||
struct multiboot_tag_vbe *tag = (struct multiboot_tag_vbe *) *ptrorig;
|
|
||||||
grub_err_t err;
|
|
||||||
|
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_VBE;
|
|
||||||
tag->size = 0;
|
|
||||||
err = grub_multiboot_fill_vbe_info_real ((struct grub_vbe_info_block *)
|
|
||||||
&(tag->vbe_control_info),
|
|
||||||
(struct grub_vbe_mode_info_block *)
|
|
||||||
&(tag->vbe_mode_info),
|
|
||||||
&(tag->vbe_mode),
|
|
||||||
&(tag->vbe_interface_seg),
|
|
||||||
&(tag->vbe_interface_off),
|
|
||||||
&(tag->vbe_interface_len));
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
if (vbe_mode_info_out)
|
|
||||||
*vbe_mode_info_out = (struct grub_vbe_mode_info_block *)
|
|
||||||
&(tag->vbe_mode_info);
|
|
||||||
tag->size = sizeof (struct multiboot_tag_vbe);
|
|
||||||
*ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Fill previously allocated Multiboot mmap. */
|
/* Fill previously allocated Multiboot mmap. */
|
||||||
static void
|
static void
|
||||||
grub_fill_multiboot_mmap (struct multiboot_tag_mmap *tag)
|
grub_fill_multiboot_mmap (struct multiboot_tag_mmap *tag)
|
||||||
|
@ -373,11 +342,35 @@ retrieve_video_parameters (grub_uint8_t **ptrorig)
|
||||||
#if HAS_VGA_TEXT
|
#if HAS_VGA_TEXT
|
||||||
if (driv_id == GRUB_VIDEO_DRIVER_NONE)
|
if (driv_id == GRUB_VIDEO_DRIVER_NONE)
|
||||||
{
|
{
|
||||||
struct grub_vbe_mode_info_block *vbe_mode_info;
|
struct grub_vbe_mode_info_block vbe_mode_info;
|
||||||
err = fill_vbe_info (&vbe_mode_info, ptrorig);
|
grub_vbe_status_t status;
|
||||||
if (err)
|
grub_uint32_t vbe_mode;
|
||||||
return err;
|
void *scratch = (void *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
|
||||||
if (vbe_mode_info->memory_model == GRUB_VBE_MEMORY_MODEL_TEXT)
|
|
||||||
|
status = grub_vbe_bios_get_mode (scratch);
|
||||||
|
vbe_mode = *(grub_uint32_t *) scratch;
|
||||||
|
if (status != GRUB_VBE_STATUS_OK)
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
/* get_mode_info isn't available for mode 3. */
|
||||||
|
if (vbe_mode == 3)
|
||||||
|
{
|
||||||
|
grub_memset (&vbe_mode_info, 0,
|
||||||
|
sizeof (struct grub_vbe_mode_info_block));
|
||||||
|
vbe_mode_info.memory_model = GRUB_VBE_MEMORY_MODEL_TEXT;
|
||||||
|
vbe_mode_info.x_resolution = 80;
|
||||||
|
vbe_mode_info.y_resolution = 25;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
status = grub_vbe_bios_get_mode_info (vbe_mode, scratch);
|
||||||
|
if (status != GRUB_VBE_STATUS_OK)
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
grub_memcpy (&vbe_mode_info, scratch,
|
||||||
|
sizeof (struct grub_vbe_mode_info_block));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vbe_mode_info.memory_model == GRUB_VBE_MEMORY_MODEL_TEXT)
|
||||||
{
|
{
|
||||||
tag = (struct multiboot_tag_framebuffer *) *ptrorig;
|
tag = (struct multiboot_tag_framebuffer *) *ptrorig;
|
||||||
tag->common.type = MULTIBOOT_TAG_TYPE_FRAMEBUFFER;
|
tag->common.type = MULTIBOOT_TAG_TYPE_FRAMEBUFFER;
|
||||||
|
@ -385,9 +378,9 @@ retrieve_video_parameters (grub_uint8_t **ptrorig)
|
||||||
|
|
||||||
tag->common.framebuffer_addr = 0xb8000;
|
tag->common.framebuffer_addr = 0xb8000;
|
||||||
|
|
||||||
tag->common.framebuffer_pitch = 2 * vbe_mode_info->x_resolution;
|
tag->common.framebuffer_pitch = 2 * vbe_mode_info.x_resolution;
|
||||||
tag->common.framebuffer_width = vbe_mode_info->x_resolution;
|
tag->common.framebuffer_width = vbe_mode_info.x_resolution;
|
||||||
tag->common.framebuffer_height = vbe_mode_info->y_resolution;
|
tag->common.framebuffer_height = vbe_mode_info.y_resolution;
|
||||||
|
|
||||||
tag->common.framebuffer_bpp = 16;
|
tag->common.framebuffer_bpp = 16;
|
||||||
|
|
||||||
|
@ -453,15 +446,6 @@ retrieve_video_parameters (grub_uint8_t **ptrorig)
|
||||||
}
|
}
|
||||||
*ptrorig += ALIGN_UP (tag->common.size, MULTIBOOT_TAG_ALIGN);
|
*ptrorig += ALIGN_UP (tag->common.size, MULTIBOOT_TAG_ALIGN);
|
||||||
|
|
||||||
#if HAS_VBE
|
|
||||||
if (driv_id == GRUB_VIDEO_DRIVER_VBE)
|
|
||||||
{
|
|
||||||
err = fill_vbe_info (NULL, ptrorig);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue