syscall.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <asm/port_io.h>
  2. #include <kernel/syscall.hpp>
  3. #include <kernel/process.hpp>
  4. #include <kernel/tty.h>
  5. syscall_handler syscall_handlers[8];
  6. void _syscall_not_impl(interrupt_stack* data)
  7. {
  8. data->s_regs.eax = 0xffffffff;
  9. data->s_regs.edx = 0xffffffff;
  10. }
  11. void _syscall_fork(interrupt_stack* data)
  12. {
  13. data->s_regs.eax = 0xfafafafa;
  14. data->s_regs.edx = 0xfefefefe;
  15. }
  16. void _syscall_write(interrupt_stack* data)
  17. {
  18. tty_print(console, reinterpret_cast<const char*>(data->s_regs.edi));
  19. data->s_regs.eax = 0;
  20. data->s_regs.edx = 0;
  21. }
  22. void _syscall_sleep(interrupt_stack* data)
  23. {
  24. current_thread->attr.ready = 0;
  25. current_thread->attr.wait = 1;
  26. do_scheduling(data);
  27. }
  28. void init_syscall(void)
  29. {
  30. syscall_handlers[0] = _syscall_fork;
  31. syscall_handlers[1] = _syscall_write;
  32. syscall_handlers[2] = _syscall_sleep;
  33. syscall_handlers[3] = _syscall_not_impl;
  34. syscall_handlers[4] = _syscall_not_impl;
  35. syscall_handlers[5] = _syscall_not_impl;
  36. syscall_handlers[6] = _syscall_not_impl;
  37. syscall_handlers[7] = _syscall_not_impl;
  38. }