49f77fff14
Save in a few special cases, _X_EXPORT should not be used in C source files. Instead, it should be used in headers, and the proper C source include that header. Some special cases are symbols that need to be shared between modules, but not expected to be used by external drivers, and symbols that are accessible via LoaderSymbol/dlopen. This patch also adds conditionally some new sdk header files, depending on extensions enabled. These files were added to match pattern for other extensions/modules, that is, have the headers "deciding" symbol visibility in the sdk. These headers are: o Xext/panoramiXsrv.h, Xext/panoramiX.h o fbpict.h (unconditionally) o vidmodeproc.h o mioverlay.h (unconditionally, used only by xaa) o xfixes.h (unconditionally, symbols required by dri2) LoaderSymbol and similar functions now don't have different prototypes, in loaderProcs.h and xf86Module.h, so that both headers can be included, without the need of defining IN_LOADER. xf86NewInputDevice() device prototype readded to xf86Xinput.h, but not exported (and with a comment about it).
90 lines
1.4 KiB
C
90 lines
1.4 KiB
C
/*
|
|
* XFree86 int10 module
|
|
* execute BIOS int 10h calls in x86 real mode environment
|
|
* Copyright 1999 Egbert Eich
|
|
*/
|
|
#ifdef HAVE_XORG_CONFIG_H
|
|
#include <xorg-config.h>
|
|
#endif
|
|
|
|
#include <x86emu.h>
|
|
#include "xf86.h"
|
|
#include "compiler.h"
|
|
#include "xf86_OSproc.h"
|
|
#include "xf86Pci.h"
|
|
#define _INT10_PRIVATE
|
|
#include "xf86int10.h"
|
|
#include "int10Defines.h"
|
|
|
|
#define M _X86EMU_env
|
|
|
|
static void
|
|
x86emu_do_int(int num)
|
|
{
|
|
Int10Current->num = num;
|
|
|
|
if (!int_handler(Int10Current)) {
|
|
X86EMU_halt_sys();
|
|
}
|
|
}
|
|
|
|
void
|
|
xf86ExecX86int10(xf86Int10InfoPtr pInt)
|
|
{
|
|
int sig = setup_int(pInt);
|
|
|
|
if (sig < 0)
|
|
return;
|
|
|
|
if (int_handler(pInt)) {
|
|
X86EMU_exec();
|
|
}
|
|
|
|
finish_int(pInt, sig);
|
|
}
|
|
|
|
Bool
|
|
xf86Int10ExecSetup(xf86Int10InfoPtr pInt)
|
|
{
|
|
int i;
|
|
X86EMU_intrFuncs intFuncs[256];
|
|
X86EMU_pioFuncs pioFuncs = {
|
|
(&x_inb),
|
|
(&x_inw),
|
|
(&x_inl),
|
|
(&x_outb),
|
|
(&x_outw),
|
|
(&x_outl)
|
|
};
|
|
|
|
X86EMU_memFuncs memFuncs = {
|
|
(&Mem_rb),
|
|
(&Mem_rw),
|
|
(&Mem_rl),
|
|
(&Mem_wb),
|
|
(&Mem_ww),
|
|
(&Mem_wl)
|
|
};
|
|
|
|
X86EMU_setupMemFuncs(&memFuncs);
|
|
|
|
pInt->cpuRegs = &M;
|
|
M.mem_base = 0;
|
|
M.mem_size = 1024*1024 + 1024;
|
|
X86EMU_setupPioFuncs(&pioFuncs);
|
|
|
|
for (i=0;i<256;i++)
|
|
intFuncs[i] = x86emu_do_int;
|
|
X86EMU_setupIntrFuncs(intFuncs);
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
printk(const char *fmt, ...)
|
|
{
|
|
va_list argptr;
|
|
va_start(argptr, fmt);
|
|
VErrorF(fmt, argptr);
|
|
va_end(argptr);
|
|
}
|