xf86x86emu.c revision 05b261ec
1/* 2 * XFree86 int10 module 3 * execute BIOS int 10h calls in x86 real mode environment 4 * Copyright 1999 Egbert Eich 5 */ 6#ifdef HAVE_XORG_CONFIG_H 7#include <xorg-config.h> 8#endif 9 10#include <x86emu.h> 11#include "xf86.h" 12#include "compiler.h" 13#include "xf86_OSproc.h" 14#include "xf86Pci.h" 15#define _INT10_PRIVATE 16#include "xf86int10.h" 17#include "int10Defines.h" 18 19#define M _X86EMU_env 20 21static void 22x86emu_do_int(int num) 23{ 24 Int10Current->num = num; 25 26 if (!int_handler(Int10Current)) { 27 X86EMU_halt_sys(); 28 } 29} 30 31void 32xf86ExecX86int10(xf86Int10InfoPtr pInt) 33{ 34 int sig = setup_int(pInt); 35 36 if (sig < 0) 37 return; 38 39 if (int_handler(pInt)) { 40 X86EMU_exec(); 41 } 42 43 finish_int(pInt, sig); 44} 45 46Bool 47xf86Int10ExecSetup(xf86Int10InfoPtr pInt) 48{ 49 int i; 50 X86EMU_intrFuncs intFuncs[256]; 51 X86EMU_pioFuncs pioFuncs = { 52 (&x_inb), 53 (&x_inw), 54 (&x_inl), 55 (&x_outb), 56 (&x_outw), 57 (&x_outl) 58 }; 59 60 X86EMU_memFuncs memFuncs = { 61 (&Mem_rb), 62 (&Mem_rw), 63 (&Mem_rl), 64 (&Mem_wb), 65 (&Mem_ww), 66 (&Mem_wl) 67 }; 68 69 X86EMU_setupMemFuncs(&memFuncs); 70 71 pInt->cpuRegs = &M; 72 M.mem_base = 0; 73 M.mem_size = 1024*1024 + 1024; 74 X86EMU_setupPioFuncs(&pioFuncs); 75 76 for (i=0;i<256;i++) 77 intFuncs[i] = x86emu_do_int; 78 X86EMU_setupIntrFuncs(intFuncs); 79 return TRUE; 80} 81 82void 83printk(const char *fmt, ...) 84{ 85 va_list argptr; 86 va_start(argptr, fmt); 87 VErrorF(fmt, argptr); 88 va_end(argptr); 89} 90