1706f2543Smrg/* 2706f2543Smrg * XFree86 int10 module 3706f2543Smrg * execute BIOS int 10h calls in x86 real mode environment 4706f2543Smrg * Copyright 1999 Egbert Eich 5706f2543Smrg */ 6706f2543Smrg#ifdef HAVE_XORG_CONFIG_H 7706f2543Smrg#include <xorg-config.h> 8706f2543Smrg#endif 9706f2543Smrg 10706f2543Smrg#include <x86emu.h> 11706f2543Smrg#include "xf86.h" 12706f2543Smrg#include "compiler.h" 13706f2543Smrg#include "xf86_OSproc.h" 14706f2543Smrg#include "xf86Pci.h" 15706f2543Smrg#define _INT10_PRIVATE 16706f2543Smrg#include "xf86int10.h" 17706f2543Smrg#include "int10Defines.h" 18706f2543Smrg 19706f2543Smrg#define M _X86EMU_env 20706f2543Smrg 21706f2543Smrgstatic void 22706f2543Smrgx86emu_do_int(int num) 23706f2543Smrg{ 24706f2543Smrg Int10Current->num = num; 25706f2543Smrg 26706f2543Smrg if (!int_handler(Int10Current)) { 27706f2543Smrg X86EMU_halt_sys(); 28706f2543Smrg } 29706f2543Smrg} 30706f2543Smrg 31706f2543Smrgvoid 32706f2543Smrgxf86ExecX86int10(xf86Int10InfoPtr pInt) 33706f2543Smrg{ 34706f2543Smrg int sig = setup_int(pInt); 35706f2543Smrg 36706f2543Smrg if (sig < 0) 37706f2543Smrg return; 38706f2543Smrg 39706f2543Smrg if (int_handler(pInt)) { 40706f2543Smrg X86EMU_exec(); 41706f2543Smrg } 42706f2543Smrg 43706f2543Smrg finish_int(pInt, sig); 44706f2543Smrg} 45706f2543Smrg 46706f2543SmrgBool 47706f2543Smrgxf86Int10ExecSetup(xf86Int10InfoPtr pInt) 48706f2543Smrg{ 49706f2543Smrg int i; 50706f2543Smrg X86EMU_intrFuncs intFuncs[256]; 51706f2543Smrg X86EMU_pioFuncs pioFuncs = { 52706f2543Smrg (&x_inb), 53706f2543Smrg (&x_inw), 54706f2543Smrg (&x_inl), 55706f2543Smrg (&x_outb), 56706f2543Smrg (&x_outw), 57706f2543Smrg (&x_outl) 58706f2543Smrg }; 59706f2543Smrg 60706f2543Smrg X86EMU_memFuncs memFuncs = { 61706f2543Smrg (&Mem_rb), 62706f2543Smrg (&Mem_rw), 63706f2543Smrg (&Mem_rl), 64706f2543Smrg (&Mem_wb), 65706f2543Smrg (&Mem_ww), 66706f2543Smrg (&Mem_wl) 67706f2543Smrg }; 68706f2543Smrg 69706f2543Smrg X86EMU_setupMemFuncs(&memFuncs); 70706f2543Smrg 71706f2543Smrg pInt->cpuRegs = &M; 72706f2543Smrg M.mem_base = 0; 73706f2543Smrg M.mem_size = 1024*1024 + 1024; 74706f2543Smrg X86EMU_setupPioFuncs(&pioFuncs); 75706f2543Smrg 76706f2543Smrg for (i=0;i<256;i++) 77706f2543Smrg intFuncs[i] = x86emu_do_int; 78706f2543Smrg X86EMU_setupIntrFuncs(intFuncs); 79706f2543Smrg return TRUE; 80706f2543Smrg} 81706f2543Smrg 82706f2543Smrgvoid 83706f2543Smrgprintk(const char *fmt, ...) 84706f2543Smrg{ 85706f2543Smrg va_list argptr; 86706f2543Smrg va_start(argptr, fmt); 87706f2543Smrg VErrorF(fmt, argptr); 88706f2543Smrg va_end(argptr); 89706f2543Smrg} 90