static struct grub_vbe_info_block controller_info;
static struct grub_vbe_mode_info_block active_vbe_mode_info;
+/* Track last mode to support cards which fail on get_mode. */
+static grub_uint32_t last_set_mode = 3;
+
static struct
{
struct grub_video_mode_info mode_info;
status = grub_vbe_bios_set_mode (vbe_mode, 0);
if (status != GRUB_VBE_STATUS_OK)
return grub_error (GRUB_ERR_BAD_DEVICE, "cannot set VBE mode %x", vbe_mode);
+ last_set_mode = vbe_mode;
/* Save information for later usage. */
framebuffer.active_vbe_mode = vbe_mode;
case 8: framebuffer.bytes_per_pixel = 1; break;
default:
grub_vbe_bios_set_mode (old_vbe_mode, 0);
+ last_set_mode = old_vbe_mode;
return grub_error (GRUB_ERR_BAD_DEVICE,
"cannot set VBE mode %x",
vbe_mode);
/* Try to query current mode from VESA BIOS. */
status = grub_vbe_bios_get_mode (mode);
- /* XXX: ATI don't support get_mode. */
+ /* XXX: ATI cards don't support get_mode. */
if (status != GRUB_VBE_STATUS_OK)
- *mode = 3;
- // return grub_error (GRUB_ERR_BAD_DEVICE, "cannot get current VBE mode");
+ *mode = last_set_mode;
return GRUB_ERR_NONE;
}
/* If not available, skip it. */
continue;
-#if 0
- if ((vbe_mode_info.mode_attributes & 0x002) == 0)
- /* Not enough information. */
- continue;
-#endif
-
if ((vbe_mode_info.mode_attributes & 0x008) == 0)
/* Monochrome is unusable. */
continue;