cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

syscall.h (1943B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2008-2009 Red Hat, Inc.  All rights reserved.
      4 * Copyright 2010 Tilera Corporation. All Rights Reserved.
      5 * Copyright 2015 Regents of the University of California, Berkeley
      6 *
      7 * See asm-generic/syscall.h for descriptions of what we must do here.
      8 */
      9
     10#ifndef _ASM_RISCV_SYSCALL_H
     11#define _ASM_RISCV_SYSCALL_H
     12
     13#include <uapi/linux/audit.h>
     14#include <linux/sched.h>
     15#include <linux/err.h>
     16
     17/* The array of function pointers for syscalls. */
     18extern void * const sys_call_table[];
     19extern void * const compat_sys_call_table[];
     20
     21/*
     22 * Only the low 32 bits of orig_r0 are meaningful, so we return int.
     23 * This importantly ignores the high bits on 64-bit, so comparisons
     24 * sign-extend the low 32 bits.
     25 */
     26static inline int syscall_get_nr(struct task_struct *task,
     27				 struct pt_regs *regs)
     28{
     29	return regs->a7;
     30}
     31
     32static inline void syscall_rollback(struct task_struct *task,
     33				    struct pt_regs *regs)
     34{
     35        regs->a0 = regs->orig_a0;
     36}
     37
     38static inline long syscall_get_error(struct task_struct *task,
     39				     struct pt_regs *regs)
     40{
     41	unsigned long error = regs->a0;
     42
     43	return IS_ERR_VALUE(error) ? error : 0;
     44}
     45
     46static inline long syscall_get_return_value(struct task_struct *task,
     47					    struct pt_regs *regs)
     48{
     49	return regs->a0;
     50}
     51
     52static inline void syscall_set_return_value(struct task_struct *task,
     53					    struct pt_regs *regs,
     54					    int error, long val)
     55{
     56	regs->a0 = (long) error ?: val;
     57}
     58
     59static inline void syscall_get_arguments(struct task_struct *task,
     60					 struct pt_regs *regs,
     61					 unsigned long *args)
     62{
     63	args[0] = regs->orig_a0;
     64	args++;
     65	memcpy(args, &regs->a1, 5 * sizeof(args[0]));
     66}
     67
     68static inline int syscall_get_arch(struct task_struct *task)
     69{
     70#ifdef CONFIG_64BIT
     71	return AUDIT_ARCH_RISCV64;
     72#else
     73	return AUDIT_ARCH_RISCV32;
     74#endif
     75}
     76
     77asmlinkage long sys_riscv_flush_icache(uintptr_t, uintptr_t, uintptr_t);
     78#endif	/* _ASM_RISCV_SYSCALL_H */