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)38 static 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