summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Vignatti <tiago.vignatti@nokia.com>2009-12-30 19:14:42 +0200
committerTiago Vignatti <tiago.vignatti@nokia.com>2009-12-30 19:14:42 +0200
commite75d1f56c3d2f74c4c6e3b2010aaa700333e5abb (patch)
tree99fb6ea324725528fffe1853f7d628cd3eea2a39
parent958af6d4073f90b820c06f3f975f9d83c41229f9 (diff)
lrmi: import more macros from X server and introduce a commom helper file
Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>
-rw-r--r--src/lrmi/Makefile.am7
-rw-r--r--src/lrmi/backend-x86emu.c76
-rw-r--r--src/lrmi/common_helper.c36
-rw-r--r--src/lrmi/common_helper.h96
4 files changed, 137 insertions, 78 deletions
diff --git a/src/lrmi/Makefile.am b/src/lrmi/Makefile.am
index bfd476f..afdd224 100644
--- a/src/lrmi/Makefile.am
+++ b/src/lrmi/Makefile.am
@@ -3,16 +3,17 @@ lib_LTLIBRARIES = libx86.la
if X86EMU
BACKEND_SRC = backend-x86emu.c
BACKEND_LIBRARY = $(top_srcdir)/src/x86emu/libx86emu.la
-BACKEND_INCLUDES = -I$(top_srcdir)/src/x86emu $(PCIACCESS_CFLAGS)
+BACKEND_INCLUDES = -I$(top_srcdir)/src/x86emu
else # VM86
+AM_CFLAGS = -D_VM86
BACKEND_SRC = backend-vm86.c
BACKEND_LIBRARY = $(top_srcdir)/src/vm86/libvm86.la
BACKEND_INCLUDES = -I$(top_srcdir)/src/vm86
endif
-libx86_la_SOURCES = common.c $(BACKEND_SRC)
+libx86_la_SOURCES = common.c common_helper.c $(BACKEND_SRC)
libx86_la_LIBADD = $(BACKEND_LIBRARY) $(PCIACCESS_LIBS)
-INCLUDES = -I$(top_srcdir)/include $(BACKEND_INCLUDES)
+INCLUDES = -I$(top_srcdir)/include $(BACKEND_INCLUDES) $(PCIACCESS_CFLAGS)
libx86includedir = $(includedir)
libx86include_HEADERS = $(top_srcdir)/include/libx86.h
diff --git a/src/lrmi/backend-x86emu.c b/src/lrmi/backend-x86emu.c
index d17d6ae..f65dc40 100644
--- a/src/lrmi/backend-x86emu.c
+++ b/src/lrmi/backend-x86emu.c
@@ -3,54 +3,12 @@
#include <string.h>
#include <pciaccess.h>
-#include "x86emu.h"
-#include "libx86.h"
#include "common.h"
+#include "common_helper.h"
xf86Int10InfoPtr Int10Current = NULL;
-#define M _X86EMU_env
-
-#define X86_EAX _X86EMU_env.x86.R_EAX
-#define X86_EBX _X86EMU_env.x86.R_EBX
-#define X86_ECX _X86EMU_env.x86.R_ECX
-#define X86_EDX _X86EMU_env.x86.R_EDX
-#define X86_ESI _X86EMU_env.x86.R_ESI
-#define X86_EDI _X86EMU_env.x86.R_EDI
-#define X86_EBP _X86EMU_env.x86.R_EBP
-#define X86_EIP _X86EMU_env.x86.R_EIP
-#define X86_ESP _X86EMU_env.x86.R_ESP
-#define X86_EFLAGS _X86EMU_env.x86.R_EFLG
-
-#define X86_FLAGS _X86EMU_env.x86.R_FLG
-#define X86_AX _X86EMU_env.x86.R_AX
-#define X86_BX _X86EMU_env.x86.R_BX
-#define X86_CX _X86EMU_env.x86.R_CX
-#define X86_DX _X86EMU_env.x86.R_DX
-#define X86_SI _X86EMU_env.x86.R_SI
-#define X86_DI _X86EMU_env.x86.R_DI
-#define X86_BP _X86EMU_env.x86.R_BP
-#define X86_IP _X86EMU_env.x86.R_IP
-#define X86_SP _X86EMU_env.x86.R_SP
-#define X86_CS _X86EMU_env.x86.R_CS
-#define X86_DS _X86EMU_env.x86.R_DS
-#define X86_ES _X86EMU_env.x86.R_ES
-#define X86_SS _X86EMU_env.x86.R_SS
-#define X86_FS _X86EMU_env.x86.R_FS
-#define X86_GS _X86EMU_env.x86.R_GS
-
-#define X86_AL _X86EMU_env.x86.R_AL
-#define X86_BL _X86EMU_env.x86.R_BL
-#define X86_CL _X86EMU_env.x86.R_CL
-#define X86_DL _X86EMU_env.x86.R_DL
-
-#define X86_AH _X86EMU_env.x86.R_AH
-#define X86_BH _X86EMU_env.x86.R_BH
-#define X86_CH _X86EMU_env.x86.R_CH
-#define X86_DH _X86EMU_env.x86.R_DH
-
-
#define CARD8 unsigned char
#define CARD16 unsigned short
#define CARD32 unsigned long
@@ -287,19 +245,6 @@ pushw(xf86Int10InfoPtr pInt, CARD16 val)
MEM_WW(pInt, ((CARD32) X86_SS << 4) + X86_SP, val);
}
-static int
-run_bios_int(int num, xf86Int10InfoPtr pInt)
-{
- CARD32 eflags;
- eflags = X86_EFLAGS;
- pushw(pInt, eflags);
- pushw(pInt, X86_CS);
- pushw(pInt, X86_IP);
- X86_CS = MEM_RW(pInt, (num << 2) + 2);
- X86_IP = MEM_RW(pInt, num << 2);
- return 1;
-}
-
static void
x86emu_do_int(int num)
{
@@ -308,25 +253,6 @@ x86emu_do_int(int num)
run_bios_int(num, Int10Current);
}
-static int
-intE6_handler(xf86Int10InfoPtr pInt)
-{
- struct pci_device * pvp;
- pvp = pInt->dev;
-
- int a = pvp->bus;
-
- if (pvp)
- X86_AX = (pvp->bus << 8) | (pvp->dev << 3) | (pvp->func & 0x7);
-
- pushw(pInt, X86_CS);
- pushw(pInt, X86_IP);
- X86_CS = pInt->BIOSseg;
- X86_EIP = 0x0003;
- X86_ES = 0; /* standard pc es */
- return 1;
-}
-
static void
pre_int(xf86Int10InfoPtr pInt)
{
diff --git a/src/lrmi/common_helper.c b/src/lrmi/common_helper.c
new file mode 100644
index 0000000..24b095b
--- /dev/null
+++ b/src/lrmi/common_helper.c
@@ -0,0 +1,36 @@
+#include <inttypes.h>
+#include <pciaccess.h>
+#include "common_helper.h"
+
+
+int
+run_bios_int(int num, xf86Int10InfoPtr pInt)
+{
+ uint32_t eflags;
+ eflags = X86_EFLAGS;
+ pushw(pInt, eflags);
+ pushw(pInt, X86_CS);
+ pushw(pInt, X86_IP);
+ X86_CS = MEM_RW(pInt, (num << 2) + 2);
+ X86_IP = MEM_RW(pInt, num << 2);
+ return 1;
+}
+
+int
+intE6_handler(xf86Int10InfoPtr pInt)
+{
+ struct pci_device * pvp;
+ pvp = pInt->dev;
+
+ int a = pvp->bus;
+
+ if (pvp)
+ X86_AX = (pvp->bus << 8) | (pvp->dev << 3) | (pvp->func & 0x7);
+
+ pushw(pInt, X86_CS);
+ pushw(pInt, X86_IP);
+ X86_CS = pInt->BIOSseg;
+ X86_EIP = 0x0003;
+ X86_ES = 0; /* standard pc es */
+ return 1;
+}
diff --git a/src/lrmi/common_helper.h b/src/lrmi/common_helper.h
new file mode 100644
index 0000000..b3fd90d
--- /dev/null
+++ b/src/lrmi/common_helper.h
@@ -0,0 +1,96 @@
+#include "libx86.h"
+
+#ifdef _VM86
+
+#include <asm/vm86.h>
+
+#define CPU_R(type,name,num) \
+ (((type *)&(((struct vm86_struct *)pInt->cpuRegs)->regs.name))[num])
+#define CPU_RD(name,num) CPU_R(uint32_t,name,num)
+#define CPU_RW(name,num) CPU_R(uint16_t,name,num)
+#define CPU_RB(name,num) CPU_R(uint8_t,name,num)
+
+#define X86_EAX CPU_RD(eax,0)
+#define X86_EBX CPU_RD(ebx,0)
+#define X86_ECX CPU_RD(ecx,0)
+#define X86_EDX CPU_RD(edx,0)
+#define X86_ESI CPU_RD(esi,0)
+#define X86_EDI CPU_RD(edi,0)
+#define X86_EBP CPU_RD(ebp,0)
+#define X86_EIP CPU_RD(eip,0)
+#define X86_ESP CPU_RD(esp,0)
+#define X86_EFLAGS CPU_RD(eflags,0)
+
+#define X86_FLAGS CPU_RW(eflags,0)
+#define X86_AX CPU_RW(eax,0)
+#define X86_BX CPU_RW(ebx,0)
+#define X86_CX CPU_RW(ecx,0)
+#define X86_DX CPU_RW(edx,0)
+#define X86_SI CPU_RW(esi,0)
+#define X86_DI CPU_RW(edi,0)
+#define X86_BP CPU_RW(ebp,0)
+#define X86_IP CPU_RW(eip,0)
+#define X86_SP CPU_RW(esp,0)
+#define X86_CS CPU_RW(cs,0)
+#define X86_DS CPU_RW(ds,0)
+#define X86_ES CPU_RW(es,0)
+#define X86_SS CPU_RW(ss,0)
+#define X86_FS CPU_RW(fs,0)
+#define X86_GS CPU_RW(gs,0)
+
+#define X86_AL CPU_RB(eax,0)
+#define X86_BL CPU_RB(ebx,0)
+#define X86_CL CPU_RB(ecx,0)
+#define X86_DL CPU_RB(edx,0)
+
+#define X86_AH CPU_RB(eax,1)
+#define X86_BH CPU_RB(ebx,1)
+#define X86_CH CPU_RB(ecx,1)
+#define X86_DH CPU_RB(edx,1)
+
+#else /*************** X86EMU **************/
+
+#include "x86emu.h"
+
+#define M _X86EMU_env
+
+#define X86_EAX _X86EMU_env.x86.R_EAX
+#define X86_EBX _X86EMU_env.x86.R_EBX
+#define X86_ECX _X86EMU_env.x86.R_ECX
+#define X86_EDX _X86EMU_env.x86.R_EDX
+#define X86_ESI _X86EMU_env.x86.R_ESI
+#define X86_EDI _X86EMU_env.x86.R_EDI
+#define X86_EBP _X86EMU_env.x86.R_EBP
+#define X86_EIP _X86EMU_env.x86.R_EIP
+#define X86_ESP _X86EMU_env.x86.R_ESP
+#define X86_EFLAGS _X86EMU_env.x86.R_EFLG
+
+#define X86_FLAGS _X86EMU_env.x86.R_FLG
+#define X86_AX _X86EMU_env.x86.R_AX
+#define X86_BX _X86EMU_env.x86.R_BX
+#define X86_CX _X86EMU_env.x86.R_CX
+#define X86_DX _X86EMU_env.x86.R_DX
+#define X86_SI _X86EMU_env.x86.R_SI
+#define X86_DI _X86EMU_env.x86.R_DI
+#define X86_BP _X86EMU_env.x86.R_BP
+#define X86_IP _X86EMU_env.x86.R_IP
+#define X86_SP _X86EMU_env.x86.R_SP
+#define X86_CS _X86EMU_env.x86.R_CS
+#define X86_DS _X86EMU_env.x86.R_DS
+#define X86_ES _X86EMU_env.x86.R_ES
+#define X86_SS _X86EMU_env.x86.R_SS
+#define X86_FS _X86EMU_env.x86.R_FS
+#define X86_GS _X86EMU_env.x86.R_GS
+
+#define X86_AL _X86EMU_env.x86.R_AL
+#define X86_BL _X86EMU_env.x86.R_BL
+#define X86_CL _X86EMU_env.x86.R_CL
+#define X86_DL _X86EMU_env.x86.R_DL
+
+#define X86_AH _X86EMU_env.x86.R_AH
+#define X86_BH _X86EMU_env.x86.R_BH
+#define X86_CH _X86EMU_env.x86.R_CH
+#define X86_DH _X86EMU_env.x86.R_DH
+
+#endif /* */
+