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 --- vgasrc/stdvgamodes.c | 9 +++++++++ vgasrc/vgabios.c | 4 ++-- 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 449a615..84c772d 100644 --- a/vgasrc/vgabios.c +++ b/vgasrc/vgabios.c @@ -1083,8 +1083,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 fc1eba6..77782e6 100644 --- a/vgasrc/vgabios.h +++ b/vgasrc/vgabios.h @@ -110,6 +110,7 @@ struct cursorpos get_cursor_pos(u8 page); 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);