1 /* 2 * Copyright 2014, General Dynamics C4 Systems 3 * 4 * SPDX-License-Identifier: GPL-2.0-only 5 */ 6 7 #pragma once 8 9 #include <config.h> // for arch/api/syscall.h 10 #include <machine.h> 11 #include <api/failures.h> 12 #include <model/statedata.h> 13 #include <kernel/vspace.h> 14 #include <arch/api/syscall.h> 15 #include <api/debug.h> 16 17 #define TIME_ARG_SIZE (sizeof(ticks_t) / sizeof(word_t)) 18 19 #ifdef CONFIG_KERNEL_MCS 20 #define MCS_DO_IF_BUDGET(_block) \ 21 updateTimestamp(); \ 22 if (likely(checkBudgetRestart())) { \ 23 _block \ 24 } 25 #else 26 #define MCS_DO_IF_BUDGET(_block) \ 27 { \ 28 _block \ 29 } 30 #endif 31 32 exception_t handleSyscall(syscall_t syscall); 33 exception_t handleInterruptEntry(void); 34 exception_t handleUnknownSyscall(word_t w); 35 exception_t handleUserLevelFault(word_t w_a, word_t w_b); 36 exception_t handleVMFaultEvent(vm_fault_type_t vm_faultType); 37 getSyscallArg(word_t i,word_t * ipc_buffer)38static inline word_t PURE getSyscallArg(word_t i, word_t *ipc_buffer) 39 { 40 if (i < n_msgRegisters) { 41 return getRegister(NODE_STATE(ksCurThread), msgRegisters[i]); 42 } 43 44 assert(ipc_buffer != NULL); 45 return ipc_buffer[i + 1]; 46 } 47 48 extern extra_caps_t current_extra_caps; 49 50