/*
Copyright (C) 2016-2019 The University of Notre Dame
This software is distributed under the GNU General Public License.
See the file LICENSE for details.
*/

#ifndef KERNEL_SYSCALL_H
#define KERNEL_SYSCALL_H

#include "kernel/types.h"
#include "kernel/error.h"

typedef enum {
	SYSCALL_DEBUG,
	SYSCALL_PROCESS_YIELD,
	SYSCALL_PROCESS_EXIT,
	SYSCALL_PROCESS_RUN,
	SYSCALL_PROCESS_WRUN,
	SYSCALL_PROCESS_FORK,
	SYSCALL_PROCESS_EXEC,
	SYSCALL_PROCESS_SELF,
	SYSCALL_PROCESS_PARENT,
	SYSCALL_PROCESS_KILL,
	SYSCALL_PROCESS_REAP,
	SYSCALL_PROCESS_WAIT,
	SYSCALL_PROCESS_SLEEP,
	SYSCALL_PROCESS_STATS,
	SYSCALL_PROCESS_HEAP,
	SYSCALL_OPEN_FILE,
	SYSCALL_OPEN_DIR,
	SYSCALL_OPEN_WINDOW,
	SYSCALL_OPEN_CONSOLE,
	SYSCALL_OPEN_PIPE,
	SYSCALL_OBJECT_TYPE,
	SYSCALL_OBJECT_COPY,
	SYSCALL_OBJECT_READ,
	SYSCALL_OBJECT_LIST,
	SYSCALL_OBJECT_WRITE,
	SYSCALL_OBJECT_SEEK,
	SYSCALL_OBJECT_SIZE,
	SYSCALL_OBJECT_REMOVE,
	SYSCALL_OBJECT_CLOSE,
	SYSCALL_OBJECT_STATS,
	SYSCALL_OBJECT_SET_TAG,
	SYSCALL_OBJECT_GET_TAG,
	SYSCALL_OBJECT_MAX,
	SYSCALL_SYSTEM_STATS,
	SYSCALL_BCACHE_STATS,
	SYSCALL_BCACHE_FLUSH,
	SYSCALL_SYSTEM_TIME,
	SYSCALL_SYSTEM_RTC,
	SYSCALL_DEVICE_DRIVER_STATS,
	MAX_SYSCALL		// must be the last element in the enum
} syscall_t;

uint32_t syscall(syscall_t s, uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t e);

#endif