summaryrefslogtreecommitdiff
path: root/vgasrc
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2014-10-23 16:37:08 -0400
committerKevin O'Connor <kevin@koconnor.net>2014-10-27 11:03:12 -0400
commit12900b1a2431946f59e4973729280296a4a9cffd (patch)
treef02bf0b37e361e771b9f44ed9d0e03eedccaad68 /vgasrc
parent63977905a05fe36deac4aee9ef28bec8a13be402 (diff)
downloadqemu-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.c9
-rw-r--r--vgasrc/vgabios.c4
-rw-r--r--vgasrc/vgabios.h1
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);