Author: myles Date: 2008-10-29 21:39:32 +0100 (Wed, 29 Oct 2008) New Revision: 964
Modified: coreboot-v3/util/x86emu/vm86.c Log: This patch makes the vm86 call succeed. It 1. moves the run_bios function down so it can call setup_realmode_idt 2. adds the __attribute__((regnum(0))) to biosint because it is called from assembly
Signed-off-by: Myles Watson mylesgw@gmail.com Acked-by: Stefan Reinauer stepan@coresystems.de
Modified: coreboot-v3/util/x86emu/vm86.c =================================================================== --- coreboot-v3/util/x86emu/vm86.c 2008-10-29 18:29:19 UTC (rev 963) +++ coreboot-v3/util/x86emu/vm86.c 2008-10-29 20:39:32 UTC (rev 964) @@ -29,7 +29,6 @@ #include <string.h> #include <io.h>
- /* The address arguments to this function are PHYSICAL ADDRESSES */ static void real_mode_switch_call_vga(unsigned long devfn) { @@ -240,19 +239,6 @@ ); }
-void run_bios(struct device *dev, unsigned long addr) -{ - int i; - - /* clear vga bios data area */ - for (i = 0x400; i < 0x500; i++) { - *(unsigned char *) i = 0; - } - - real_mode_switch_call_vga((dev->bus->secondary << 8) | dev->path.pci.devfn); -} - - // we had hoped to avoid this. // this is a stub IDT only. It's main purpose is to ignore calls // to the BIOS. @@ -415,7 +401,7 @@
extern void vga_exit(void);
-int biosint(unsigned long intnumber, +int __attribute__((regparm(0))) biosint(unsigned long intnumber, unsigned long gsfs, unsigned long dses, unsigned long edi, unsigned long esi, unsigned long ebp, unsigned long esp, @@ -484,7 +470,6 @@ return ret; }
- void setup_realmode_idt(void) { extern unsigned char idthandle, end_idthandle; @@ -543,12 +528,21 @@ idts[1].offset = 16384; memcpy((void *)16384, &debughandle, &end_debughandle - &debughandle); #endif - - }
+void run_bios(struct device *dev, unsigned long addr) +{ + int i;
+ /* clear vga bios data area */ + for (i = 0x400; i < 0x500; i++) { + *(unsigned char *) i = 0; + } + setup_realmode_idt();
+ real_mode_switch_call_vga((dev->bus->secondary << 8) | dev->path.pci.devfn); +} + enum { CHECK = 0xb001, FINDDEV = 0xb102,