summaryrefslogtreecommitdiff
path: root/vgasrc/vbe.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2014-02-05 20:52:25 -0500
committerKevin O'Connor <kevin@koconnor.net>2014-02-05 20:52:25 -0500
commit20dc419306701354f17abc8fe5d8eb467a009470 (patch)
tree91caf5103a0b32aa78678ada7b40e241ba98860f /vgasrc/vbe.c
parentda6a15762b07028926fe0d78b1b54153c4f0c560 (diff)
downloadqemu-seabios-20dc419306701354f17abc8fe5d8eb467a009470.tar.gz
vgabios: Simplify save/restore mechanism.
Reorganize the save/restore functions to eliminate some boilerplate code. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'vgasrc/vbe.c')
-rw-r--r--vgasrc/vbe.c27
1 files changed, 6 insertions, 21 deletions
diff --git a/vgasrc/vbe.c b/vgasrc/vbe.c
index f7e2203..12bd981 100644
--- a/vgasrc/vbe.c
+++ b/vgasrc/vbe.c
@@ -228,29 +228,14 @@ vbe_104f04(struct bregs *regs)
u16 seg = regs->es;
void *data = (void*)(regs->bx+0);
u16 states = regs->cx;
- if (states & ~0x0f)
+ u8 cmd = regs->dl;
+ if (states & ~0x0f || cmd > 2)
goto fail;
- int ret;
- switch (regs->dl) {
- case 0x00:
- ret = vgahw_size_state(states);
- if (ret < 0)
- goto fail;
- regs->bx = ret / 64;
- break;
- case 0x01:
- ret = vgahw_save_state(seg, data, states);
- if (ret)
- goto fail;
- break;
- case 0x02:
- ret = vgahw_restore_state(seg, data, states);
- if (ret)
- goto fail;
- break;
- default:
+ int ret = vgahw_save_restore(states | (cmd<<8), seg, data);
+ if (ret < 0)
goto fail;
- }
+ if (cmd == 0)
+ regs->bx = ret / 64;
regs->ax = 0x004f;
return;
fail: