diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2014-10-23 16:37:08 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2014-10-27 11:03:12 -0400 |
commit | 12900b1a2431946f59e4973729280296a4a9cffd (patch) | |
tree | f02bf0b37e361e771b9f44ed9d0e03eedccaad68 /vgasrc | |
parent | 63977905a05fe36deac4aee9ef28bec8a13be402 (diff) | |
download | qemu-seabios-12900b1a2431946f59e4973729280296a4a9cffd.tar.gz |
vgabios: Fill in available legacy modes in video_func_static at runtime
Instead of hard coding the list of modes, fill them in from the list
of supported modes.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'vgasrc')
-rw-r--r-- | vgasrc/stdvgamodes.c | 9 | ||||
-rw-r--r-- | vgasrc/vgabios.c | 4 | ||||
-rw-r--r-- | vgasrc/vgabios.h | 1 |
3 files changed, 12 insertions, 2 deletions
diff --git a/vgasrc/stdvgamodes.c b/vgasrc/stdvgamodes.c index 53b7463..c553514 100644 --- a/vgasrc/stdvgamodes.c +++ b/vgasrc/stdvgamodes.c @@ -397,6 +397,15 @@ stdvga_build_video_param(void) , get_global_seg(), GET_GLOBAL(stdmode_g->grdc_regs) , ARRAY_SIZE(vparam_g->grdc_regs)); } + + // Fill available legacy modes in video_func_static table + u32 modes = 0; + for (i = 0; i < ARRAY_SIZE(vga_modes); i++) { + u16 mode = vga_modes[i].mode; + if (mode <= 0x13) + modes |= 1<<i; + } + SET_VGA(static_functionality.modes, modes); } void diff --git a/vgasrc/vgabios.c b/vgasrc/vgabios.c index 9b94f4d..858f415 100644 --- a/vgasrc/vgabios.c +++ b/vgasrc/vgabios.c @@ -1076,8 +1076,8 @@ handle_101a(struct bregs *regs) } -static struct video_func_static static_functionality VAR16 = { - .modes = 0x0fe0ff, +struct video_func_static static_functionality VAR16 = { + .modes = 0x00, // Filled in by stdvga_build_video_param() .scanlines = 0x07, // 200, 350, 400 scan lines .cblocks = 0x02, // mamimum number of visible charsets in text mode .active_cblocks = 0x08, // total number of charset blocks in text mode diff --git a/vgasrc/vgabios.h b/vgasrc/vgabios.h index 397225a..d06ebb4 100644 --- a/vgasrc/vgabios.h +++ b/vgasrc/vgabios.h @@ -107,6 +107,7 @@ u16 calc_page_size(u8 memmodel, u16 width, u16 height); int bda_save_restore(int cmd, u16 seg, void *data); struct vgamode_s *get_current_mode(void); int vga_set_mode(int mode, int flags); +extern struct video_func_static static_functionality; // vgafb.c void init_gfx_op(struct gfx_op *op, struct vgamode_s *vmode_g); |