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 <[EMAIL PROTECTED]>
Acked-by: Stefan Reinauer <[EMAIL PROTECTED]>


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,


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to