grub_video_get_edid is not usable from grub_vbe_get_preferred_mode, as a

video adapter has not necessarily yet been set.  Use grub_video_vbe_get_edid
and grub_video_edid_checksum directly instead.  Remove grub_video_get_edid
as it now has no users.
Reported by: Marjo Mercado.
This commit is contained in:
Colin Watson 2011-01-17 12:07:47 +00:00
parent cb918eddf4
commit 9b300caf84
4 changed files with 21 additions and 41 deletions

View file

@ -377,6 +377,24 @@ grub_vbe_probe (struct grub_vbe_info_block *info_block)
return GRUB_ERR_NONE;
}
static grub_err_t
grub_video_vbe_get_edid (struct grub_video_edid_info *edid_info)
{
struct grub_video_edid_info *edid_info_lowmem;
/* Use low memory scratch area as temporary storage for VESA BIOS calls. */
edid_info_lowmem =
(struct grub_video_edid_info *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
grub_memset (edid_info_lowmem, 0, sizeof (*edid_info_lowmem));
if (grub_vbe_bios_read_edid (edid_info_lowmem) != GRUB_VBE_STATUS_OK)
return grub_error (GRUB_ERR_BAD_DEVICE, "EDID information not available");
grub_memcpy (edid_info, edid_info_lowmem, sizeof (*edid_info));
return GRUB_ERR_NONE;
}
static grub_err_t
grub_vbe_get_preferred_mode (unsigned int *width, unsigned int *height)
{
@ -394,7 +412,8 @@ grub_vbe_get_preferred_mode (unsigned int *width, unsigned int *height)
&& (grub_vbe_bios_get_ddc_capabilities (&ddc_level) & 0xff)
== GRUB_VBE_STATUS_OK)
{
if (grub_video_get_edid (&edid_info) == GRUB_ERR_NONE
if (grub_video_vbe_get_edid (&edid_info) == GRUB_ERR_NONE
&& grub_video_edid_checksum (&edid_info) == GRUB_ERR_NONE
&& grub_video_edid_preferred_mode (&edid_info, width, height)
== GRUB_ERR_NONE)
return GRUB_ERR_NONE;
@ -969,24 +988,6 @@ grub_video_vbe_get_info_and_fini (struct grub_video_mode_info *mode_info,
return grub_video_fb_get_info_and_fini (mode_info, framebuf);
}
static grub_err_t
grub_video_vbe_get_edid (struct grub_video_edid_info *edid_info)
{
struct grub_video_edid_info *edid_info_lowmem;
/* Use low memory scratch area as temporary storage for VESA BIOS calls. */
edid_info_lowmem =
(struct grub_video_edid_info *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
grub_memset (edid_info_lowmem, 0, sizeof (*edid_info_lowmem));
if (grub_vbe_bios_read_edid (edid_info_lowmem) != GRUB_VBE_STATUS_OK)
return grub_error (GRUB_ERR_BAD_DEVICE, "EDID information not available");
grub_memcpy (edid_info, edid_info_lowmem, sizeof (*edid_info));
return GRUB_ERR_NONE;
}
static void
grub_video_vbe_print_adapter_specific_info (void)
{

View file

@ -393,24 +393,6 @@ grub_video_edid_checksum (struct grub_video_edid_info *edid_info)
return grub_errno;
}
grub_err_t
grub_video_get_edid (struct grub_video_edid_info *edid_info)
{
if (! grub_video_adapter_active)
return grub_error (GRUB_ERR_BAD_DEVICE, "no video mode activated");
if (! grub_video_adapter_active->get_edid)
return grub_error (GRUB_ERR_BAD_DEVICE,
"EDID information unavailable for this video mode");
if (grub_video_adapter_active->get_edid (edid_info) != GRUB_ERR_NONE)
return grub_errno;
if (grub_video_edid_checksum (edid_info) != GRUB_ERR_NONE)
return grub_errno;
return GRUB_ERR_NONE;
}
grub_err_t
grub_video_edid_preferred_mode (struct grub_video_edid_info *edid_info,
unsigned int *width, unsigned int *height)