syscall.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <Kernel/API/Syscall.h>
  8. #include <sys/types.h>
  9. extern "C" {
  10. uintptr_t syscall0(uintptr_t function);
  11. uintptr_t syscall1(uintptr_t function, uintptr_t arg0);
  12. uintptr_t syscall2(uintptr_t function, uintptr_t arg0, uintptr_t arg1);
  13. uintptr_t syscall3(uintptr_t function, uintptr_t arg0, uintptr_t arg1, uintptr_t arg2);
  14. uintptr_t syscall4(uintptr_t function, uintptr_t arg0, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3);
  15. }
  16. #ifdef __cplusplus
  17. inline uintptr_t syscall(auto function)
  18. {
  19. return syscall0(function);
  20. }
  21. inline uintptr_t syscall(auto function, auto arg0)
  22. {
  23. return syscall1((uintptr_t)function, (uintptr_t)arg0);
  24. }
  25. inline uintptr_t syscall(auto function, auto arg0, auto arg1)
  26. {
  27. return syscall2((uintptr_t)function, (uintptr_t)arg0, (uintptr_t)arg1);
  28. }
  29. inline uintptr_t syscall(auto function, auto arg0, auto arg1, auto arg2)
  30. {
  31. return syscall3((uintptr_t)function, (uintptr_t)arg0, (uintptr_t)arg1, (uintptr_t)arg2);
  32. }
  33. inline uintptr_t syscall(auto function, auto arg0, auto arg1, auto arg2, auto arg3)
  34. {
  35. return syscall4((uintptr_t)function, (uintptr_t)arg0, (uintptr_t)arg1, (uintptr_t)arg2, (uintptr_t)arg3);
  36. }
  37. #endif