diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2014-02-05 20:52:25 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2014-02-05 20:52:25 -0500 |
commit | 20dc419306701354f17abc8fe5d8eb467a009470 (patch) | |
tree | 91caf5103a0b32aa78678ada7b40e241ba98860f /vgasrc/vbe.c | |
parent | da6a15762b07028926fe0d78b1b54153c4f0c560 (diff) | |
download | 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.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/vgasrc/vbe.c b/vgasrc/vbe.c index f7e2203a..12bd9812 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: |