From 74bfdd2f77fd05294ab7aa72dc2557d07a48feb8 Mon Sep 17 00:00:00 2001 From: robertmh Date: Mon, 4 May 2009 20:21:33 +0000 Subject: [PATCH] 2009-05-04 Robert Millan * include/grub/i386/linux.h (GRUB_LINUX_VID_MODE_VESA_START): Set to 0x300. * loader/i386/linux.c (vga_modes, linux_vesafb_res): Add a few resolutions. (linux_vesafb_modes): Add a lot of additional modes to the list (based on documentation from Wikipedia). --- ChangeLog | 9 +++ include/grub/i386/linux.h | 2 +- loader/i386/linux.c | 147 ++++++++++++++++++++++++++++++++------ 3 files changed, 137 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6c5ca242..6bc5f305c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-05-04 Robert Millan + + * include/grub/i386/linux.h (GRUB_LINUX_VID_MODE_VESA_START): Set + to 0x300. + * loader/i386/linux.c (vga_modes, linux_vesafb_res): Add a few + resolutions. + (linux_vesafb_modes): Add a lot of additional modes to the list (based + on documentation from Wikipedia). + 2009-05-04 Pavel Roskin * disk/ata.c: Spelling fixes. diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h index dad38e545..70eba1da7 100644 --- a/include/grub/i386/linux.h +++ b/include/grub/i386/linux.h @@ -38,7 +38,7 @@ #define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF #define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE #define GRUB_LINUX_VID_MODE_ASK 0xFFFD -#define GRUB_LINUX_VID_MODE_VESA_START 0x0301 +#define GRUB_LINUX_VID_MODE_VESA_START 0x0300 #define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 #define GRUB_LINUX_CL_MAGIC 0xA33F diff --git a/loader/i386/linux.c b/loader/i386/linux.c index 1a237108b..d67a5f8e3 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -102,46 +102,65 @@ struct linux_vesafb_res grub_uint16_t height; }; -enum vga_modes - { - VGA_640_480, - VGA_800_600, - VGA_1024_768, - VGA_1280_1024, - }; - struct linux_vesafb_mode { grub_uint8_t res_index; grub_uint8_t depth; }; -static struct linux_vesafb_res linux_vesafb_res[] = +enum vga_modes { - { 640, 480 }, - { 800, 600 }, - { 1024, 768 }, - { 1280, 1024 } + VGA_320_200, + VGA_640_400, + VGA_640_480, + VGA_800_500, + VGA_800_600, + VGA_896_672, + VGA_1024_640, + VGA_1024_768, + VGA_1152_720, + VGA_1280_1024, + VGA_1440_900, + VGA_1600_1200, }; -/* This is the reverse of the table in [linux]/Documentation/fb/vesafb.txt. */ +static struct linux_vesafb_res linux_vesafb_res[] = + { + { 320, 200 }, + { 640, 400 }, + { 640, 480 }, + { 800, 500 }, + { 800, 600 }, + { 896, 672 }, + { 1024, 640 }, + { 1024, 768 }, + { 1152, 720 }, + { 1280, 1024 }, + { 1440, 900 }, + { 1600, 1200 }, + }; + +/* This is the reverse of the table in [linux]/Documentation/fb/vesafb.txt + plus a few more modes based on the table in + http://en.wikipedia.org/wiki/VESA_BIOS_Extensions */ struct linux_vesafb_mode linux_vesafb_modes[] = { + { VGA_640_400, 8 }, /* 0x300 */ { VGA_640_480, 8 }, /* 0x301 */ - { 0, 0 }, + { VGA_800_600, 4 }, /* 0x302 */ { VGA_800_600, 8 }, /* 0x303 */ - { 0, 0 }, + { VGA_1024_768, 4 }, /* 0x304 */ { VGA_1024_768, 8 }, /* 0x305 */ - { 0, 0 }, + { VGA_1280_1024, 4 }, /* 0x306 */ { VGA_1280_1024, 8 }, /* 0x307 */ { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, - { 0, 0 }, - { 0, 0 }, - { 0, 0 }, + { VGA_320_200, 15 }, /* 0x30d */ + { VGA_320_200, 16 }, /* 0x30e */ + { VGA_320_200, 24 }, /* 0x30f */ { VGA_640_480, 15 }, /* 0x310 */ { VGA_640_480, 16 }, /* 0x311 */ { VGA_640_480, 24 }, /* 0x312 */ @@ -154,6 +173,94 @@ struct linux_vesafb_mode linux_vesafb_modes[] = { VGA_1280_1024, 15 }, /* 0x319 */ { VGA_1280_1024, 16 }, /* 0x31a */ { VGA_1280_1024, 24 }, /* 0x31b */ + { VGA_1600_1200, 8 }, /* 0x31c */ + { VGA_1600_1200, 15 }, /* 0x31d */ + { VGA_1600_1200, 16 }, /* 0x31e */ + { VGA_1600_1200, 24 }, /* 0x31f */ + { 0, 0 }, + { VGA_640_400, 15 }, /* 0x321 */ + { VGA_640_400, 16 }, /* 0x322 */ + { VGA_640_400, 24 }, /* 0x323 */ + { VGA_640_400, 32 }, /* 0x324 */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { VGA_640_480, 32 }, /* 0x329 */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { VGA_896_672, 8 }, /* 0x32f */ + { VGA_896_672, 15 }, /* 0x330 */ + { VGA_896_672, 16 }, /* 0x331 */ + { VGA_896_672, 24 }, /* 0x332 */ + { VGA_896_672, 32 }, /* 0x333 */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { VGA_1600_1200, 32 }, /* 0x342 */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { VGA_1440_900, 8 }, /* 0x360 */ + { VGA_1440_900, 15 }, /* 0x361 */ + { VGA_1440_900, 16 }, /* 0x362 */ + { VGA_1440_900, 24 }, /* 0x363 */ + { VGA_1440_900, 32 }, /* 0x364 */ + { VGA_1152_720, 8 }, /* 0x365 */ + { VGA_1152_720, 15 }, /* 0x366 */ + { VGA_1152_720, 16 }, /* 0x367 */ + { VGA_1152_720, 24 }, /* 0x368 */ + { VGA_1152_720, 32 }, /* 0x369 */ + { VGA_1024_640, 8 }, /* 0x36a */ + { VGA_1024_640, 15 }, /* 0x36b */ + { VGA_1024_640, 16 }, /* 0x36c */ + { VGA_1024_640, 24 }, /* 0x36d */ + { VGA_1024_640, 32 }, /* 0x36e */ + { VGA_800_500, 8 }, /* 0x36f */ + { VGA_800_500, 15 }, /* 0x370 */ + { VGA_800_500, 16 }, /* 0x371 */ + { VGA_800_500, 24 }, /* 0x372 */ + { VGA_800_500, 32 }, /* 0x373 */ }; static inline grub_size_t