summaryrefslogtreecommitdiff
path: root/vgasrc
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2014-04-06 18:48:39 -0400
committerKevin O'Connor <kevin@koconnor.net>2014-04-11 11:26:23 -0400
commit8f82a4fb4aff536e48653c2b10a36018ea77e29e (patch)
treeae0cf732c501e3dccf7c2236cf0feba3e83686bc /vgasrc
parentf6b44b81e61be2e03a9e296dd592cbf4d78a336b (diff)
downloadqemu-seabios-8f82a4fb4aff536e48653c2b10a36018ea77e29e.tar.gz
vgabios: PMM scan was incorrectly depending on a zero %ds segment.
Make sure the PMM scanning code uses the GET_FARVAR macro. (The existing code only worked because SeaBIOS happens to call the vgabios in bigreal mode with %ds == %ss = 0.) Also, the scan doesn't require bigreal mode - use accesses relative to the SEG_BIOS segment so that the scan can work in regular real mode. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'vgasrc')
-rw-r--r--vgasrc/vgainit.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/vgasrc/vgainit.c b/vgasrc/vgainit.c
index 33b8eb9..6d9a224 100644
--- a/vgasrc/vgainit.c
+++ b/vgasrc/vgainit.c
@@ -60,14 +60,14 @@ allocate_extra_stack(void)
{
if (!CONFIG_VGA_ALLOCATE_EXTRA_STACK)
return;
- void *pmmscan = (void*)BUILD_BIOS_ADDR;
- for (; pmmscan < (void*)BUILD_BIOS_ADDR+BUILD_BIOS_SIZE; pmmscan+=16) {
- struct pmmheader *pmm = pmmscan;
- if (pmm->signature != PMM_SIGNATURE)
+ u32 pmmscan;
+ for (pmmscan=0; pmmscan < BUILD_BIOS_SIZE; pmmscan+=16) {
+ struct pmmheader *pmm = (void*)pmmscan;
+ if (GET_FARVAR(SEG_BIOS, pmm->signature) != PMM_SIGNATURE)
continue;
- if (checksum_far(0, pmm, pmm->length))
+ if (checksum_far(SEG_BIOS, pmm, GET_FARVAR(SEG_BIOS, pmm->length)))
continue;
- struct segoff_s entry = pmm->entry;
+ struct segoff_s entry = GET_FARVAR(SEG_BIOS, pmm->entry);
dprintf(1, "Attempting to allocate VGA stack via pmm call to %04x:%04x\n"
, entry.seg, entry.offset);
u16 res1, res2;