diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2018-06-22 08:43:04 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2018-06-26 09:16:31 +0200 |
commit | 69ea6dabeba4e080fc916a6bc9a2d53ffb4f916c (patch) | |
tree | f556df890e74a80c7ed17f3adf6fab7613fdb7f9 | |
parent | d9a8b867a3af8090290b69b8f94b24e7fba9e504 (diff) | |
download | seabios-69ea6dabeba4e080fc916a6bc9a2d53ffb4f916c.tar.gz |
cbvga_set_mode: refine clear display logic
There is no need to skip text mode clearing.
Clearing the framebuffer should be safe on legacy calls too.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | vgasrc/cbvga.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/vgasrc/cbvga.c b/vgasrc/cbvga.c index f6ebe712..859524cb 100644 --- a/vgasrc/cbvga.c +++ b/vgasrc/cbvga.c @@ -201,18 +201,20 @@ cbvga_set_mode(struct vgamode_s *vmode_g, int flags) */ u8 extra_stack = GET_BDA_EXT(flags) & BF_EXTRA_STACK; MASK_BDA_EXT(flags, BF_EMULATE_TEXT, emul ? BF_EMULATE_TEXT : 0); - if (!(flags & MF_NOCLEARMEM) && extra_stack) { + if (!(flags & MF_NOCLEARMEM)) { if (GET_GLOBAL(CBmodeinfo.memmodel) == MM_TEXT) { memset16_far(SEG_CTEXT, (void*)0, 0x0720, 80*25*2); return 0; } - struct gfx_op op; - init_gfx_op(&op, &CBmodeinfo); - op.x = op.y = 0; - op.xlen = GET_GLOBAL(CBmodeinfo.width); - op.ylen = GET_GLOBAL(CBmodeinfo.height); - op.op = GO_MEMSET; - handle_gfx_op(&op); + if (extra_stack || flags & MF_LEGACY) { + struct gfx_op op; + init_gfx_op(&op, &CBmodeinfo); + op.x = op.y = 0; + op.xlen = GET_GLOBAL(CBmodeinfo.width); + op.ylen = GET_GLOBAL(CBmodeinfo.height); + op.op = GO_MEMSET; + handle_gfx_op(&op); + } } return 0; } |