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