diff options
author | Tiago Vignatti <tiago.vignatti@nokia.com> | 2009-12-30 19:14:42 +0200 |
---|---|---|
committer | Tiago Vignatti <tiago.vignatti@nokia.com> | 2009-12-30 19:14:42 +0200 |
commit | e75d1f56c3d2f74c4c6e3b2010aaa700333e5abb (patch) | |
tree | 99fb6ea324725528fffe1853f7d628cd3eea2a39 | |
parent | 958af6d4073f90b820c06f3f975f9d83c41229f9 (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.am | 7 | ||||
-rw-r--r-- | src/lrmi/backend-x86emu.c | 76 | ||||
-rw-r--r-- | src/lrmi/common_helper.c | 36 | ||||
-rw-r--r-- | src/lrmi/common_helper.h | 96 |
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 /* */ + |