summaryrefslogtreecommitdiff
path: root/util/x86emu/yabel
diff options
context:
space:
mode:
authorStefan Reinauer <stepan@coresystems.de>2009-10-25 19:50:47 +0000
committerStefan Reinauer <stepan@openbios.org>2009-10-25 19:50:47 +0000
commit074356ec819be284fb1e8d18a68678b72c5282da (patch)
tree9f92a9da412d3cb8be7958390164fe44d4b7ec16 /util/x86emu/yabel
parent46a895e633a6b4bd3f4a8391529cc069a8a8d04b (diff)
Option ROM init x86/x86emu update
- use default display in int 15 5f35 - move REALMODE_BASE to 0x600, 0x500 can be BDA - add regparm for assembler functions - use memset instead of own implementation - YABEL: copy back the IVT, BDA and VBIOS. Some Xorg drivers require this. - YABEL: use hardware timer instead of emulated timer, because the emulated timer's base is never initialized (leading to division by zero if the timer is really used) Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Peter Stuge <peter@stuge.se> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4852 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'util/x86emu/yabel')
-rw-r--r--util/x86emu/yabel/compat/functions.c4
-rw-r--r--util/x86emu/yabel/io.c8
2 files changed, 10 insertions, 2 deletions
diff --git a/util/x86emu/yabel/compat/functions.c b/util/x86emu/yabel/compat/functions.c
index 3b3d223b71..904f786bf6 100644
--- a/util/x86emu/yabel/compat/functions.c
+++ b/util/x86emu/yabel/compat/functions.c
@@ -17,6 +17,7 @@
#ifndef CONFIG_COREBOOT_V2
#include <config.h>
#endif
+#include <string.h>
#include <device/device.h>
#define VMEM_SIZE 1024 *1024 /* 1 MB */
@@ -33,6 +34,9 @@ u32 biosemu(u8 *biosmem, u32 biosmem_size, struct device *dev,
void run_bios(struct device * dev, unsigned long addr)
{
biosemu(vmem, VMEM_SIZE, dev, addr);
+ memcpy(0x0, vmem + 0x0, 0x400);
+ memcpy(0x400, vmem + 0x400, 0x100);
+ memcpy(0xc0000, vmem + 0xc0000, 0x10000);
}
u64 get_time(void)
diff --git a/util/x86emu/yabel/io.c b/util/x86emu/yabel/io.c
index 16a8b58331..c2e6da818d 100644
--- a/util/x86emu/yabel/io.c
+++ b/util/x86emu/yabel/io.c
@@ -36,6 +36,9 @@ extern int write_io(void *, unsigned int, size_t);
//defined in net-snk/kernel/timer.c
extern u64 get_time(void);
+#ifdef COREBOOT_V2
+#include <arch/io.h>
+#else
// these are not used, only needed for linking, must be overridden using X86emu_setupPioFuncs
// with the functions and struct below
void
@@ -82,7 +85,7 @@ inl(u16 port)
HALT_SYS();
return 0;
}
-
+#endif
u32 pci_cfg_read(X86EMU_pioAddr addr, u8 size);
void pci_cfg_write(X86EMU_pioAddr addr, u32 val, u8 size);
u8 handle_port_61h(void);
@@ -106,7 +109,8 @@ my_inb(X86EMU_pioAddr addr)
switch (addr) {
case 0x61:
//8254 KB Controller / Timer Port
- rval = handle_port_61h();
+ // rval = handle_port_61h();
+ rval = inb(0x61);
//DEBUG_PRINTF_IO("%s(%04x) KB / Timer Port B --> %02x\n", __func__, addr, rval);
return rval;
break;