seL4/include/api/syscall.h
Anna Lyons 7124449936 mcs: tickless scheduler implementation
This changes the budget/remaining fields in scheduling contexts
to contain timer ticks, not number of abstract sel4ticks.

seL4_SchedControl_Configure now takes microseconds, not ticks.

This commit is plat-independant - the platform and arch specific
timer code follows in later commits.
2019-08-22 11:22:34 +10:00

55 lines
1.3 KiB
C

/*
* Copyright 2014, General Dynamics C4 Systems
*
* This software may be distributed and modified according to the terms of
* the GNU General Public License version 2. Note that NO WARRANTY is provided.
* See "LICENSE_GPLv2.txt" for details.
*
* @TAG(GD_GPL)
*/
#ifndef __API_SYSCALL_H
#define __API_SYSCALL_H
#include <config.h> // for arch/api/syscall.h
#include <machine.h>
#include <api/failures.h>
#include <model/statedata.h>
#include <kernel/vspace.h>
#include <arch/api/syscall.h>
#include <api/debug.h>
#define TIME_ARG_SIZE (sizeof(ticks_t) / sizeof(word_t))
#ifdef CONFIG_KERNEL_MCS
#define MCS_DO_IF_BUDGET(_block) \
updateTimestamp(); \
if (likely(checkBudgetRestart())) { \
_block \
}
#else
#define MCS_DO_IF_BUDGET(_block) \
{ \
_block \
}
#endif
exception_t handleSyscall(syscall_t syscall);
exception_t handleInterruptEntry(void);
exception_t handleUnknownSyscall(word_t w);
exception_t handleUserLevelFault(word_t w_a, word_t w_b);
exception_t handleVMFaultEvent(vm_fault_type_t vm_faultType);
static inline word_t PURE getSyscallArg(word_t i, word_t *ipc_buffer)
{
if (i < n_msgRegisters) {
return getRegister(NODE_STATE(ksCurThread), msgRegisters[i]);
}
assert(ipc_buffer != NULL);
return ipc_buffer[i + 1];
}
extern extra_caps_t current_extra_caps;
#endif