xf86x86emu.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. #include <x86emu.h>
  10. #include "xf86.h"
  11. #include "xf86_OSproc.h"
  12. #include "xf86Pci.h"
  13. #define _INT10_PRIVATE
  14. #include "xf86int10.h"
  15. #include "int10Defines.h"
  16. #define M _X86EMU_env
  17. static void
  18. x86emu_do_int(int num)
  19. {
  20. Int10Current->num = num;
  21. if (!int_handler(Int10Current)) {
  22. X86EMU_halt_sys();
  23. }
  24. }
  25. void
  26. xf86ExecX86int10(xf86Int10InfoPtr pInt)
  27. {
  28. int sig = setup_int(pInt);
  29. if (sig < 0)
  30. return;
  31. if (int_handler(pInt)) {
  32. X86EMU_exec();
  33. }
  34. finish_int(pInt, sig);
  35. }
  36. Bool
  37. xf86Int10ExecSetup(xf86Int10InfoPtr pInt)
  38. {
  39. int i;
  40. X86EMU_intrFuncs intFuncs[256];
  41. X86EMU_pioFuncs pioFuncs = {
  42. .inb = x_inb,
  43. .inw = x_inw,
  44. .inl = x_inl,
  45. .outb = x_outb,
  46. .outw = x_outw,
  47. .outl = x_outl
  48. };
  49. X86EMU_memFuncs memFuncs = {
  50. (&Mem_rb),
  51. (&Mem_rw),
  52. (&Mem_rl),
  53. (&Mem_wb),
  54. (&Mem_ww),
  55. (&Mem_wl)
  56. };
  57. X86EMU_setupMemFuncs(&memFuncs);
  58. pInt->cpuRegs = &M;
  59. M.mem_base = 0;
  60. M.mem_size = 1024 * 1024 + 1024;
  61. X86EMU_setupPioFuncs(&pioFuncs);
  62. for (i = 0; i < 256; i++)
  63. intFuncs[i] = x86emu_do_int;
  64. X86EMU_setupIntrFuncs(intFuncs);
  65. return TRUE;
  66. }
  67. void
  68. printk(const char *fmt, ...)
  69. {
  70. va_list argptr;
  71. va_start(argptr, fmt);
  72. VErrorF(fmt, argptr);
  73. va_end(argptr);
  74. }