Xenomai
3.1
syscall.h
1
/*
2
* Copyright (C) 2001,2002,2003,2004 Philippe Gerum <rpm@xenomai.org>.
3
*
4
* ARM port
5
* Copyright (C) 2005 Stelian Pop
6
*
7
* Xenomai is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published
9
* by the Free Software Foundation; either version 2 of the License,
10
* or (at your option) any later version.
11
*
12
* Xenomai is distributed in the hope that it will be useful, but
13
* WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with Xenomai; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20
* 02111-1307, USA.
21
*/
22
#ifndef _COBALT_ARM64_ASM_SYSCALL_H
23
#define _COBALT_ARM64_ASM_SYSCALL_H
24
25
#include <linux/errno.h>
26
#include <linux/uaccess.h>
27
#include <asm/unistd.h>
28
#include <asm/ptrace.h>
29
#include <asm-generic/xenomai/syscall.h>
30
31
/*
32
* Cobalt and Linux syscall numbers can be fetched from syscallno,
33
* masking out the __COBALT_SYSCALL_BIT marker.
34
*/
35
#define __xn_reg_sys(__regs) ((unsigned long)(__regs)->syscallno)
36
#define __xn_syscall_p(regs) ((__xn_reg_sys(regs) & __COBALT_SYSCALL_BIT) != 0)
37
#define __xn_syscall(__regs) ((unsigned long)(__xn_reg_sys(__regs) & ~__COBALT_SYSCALL_BIT))
38
39
#define __xn_reg_rval(__regs) ((__regs)->regs[0])
40
#define __xn_reg_arg1(__regs) ((__regs)->regs[0])
41
#define __xn_reg_arg2(__regs) ((__regs)->regs[1])
42
#define __xn_reg_arg3(__regs) ((__regs)->regs[2])
43
#define __xn_reg_arg4(__regs) ((__regs)->regs[3])
44
#define __xn_reg_arg5(__regs) ((__regs)->regs[4])
45
#define __xn_reg_pc(__regs) ((__regs)->pc)
46
#define __xn_reg_sp(__regs) ((__regs)->sp)
47
48
/*
49
* Root syscall number with predicate (valid only if
50
* !__xn_syscall_p(__regs)).
51
*/
52
#define __xn_rootcall_p(__regs, __code) \
53
({ \
54
*(__code) = __xn_syscall(__regs); \
55
*(__code) < NR_syscalls; \
56
})
57
58
static
inline
void
__xn_error_return(
struct
pt_regs *regs,
int
v)
59
{
60
__xn_reg_rval(regs) = v;
61
}
62
63
static
inline
void
__xn_status_return(
struct
pt_regs *regs,
long
v)
64
{
65
__xn_reg_rval(regs) = v;
66
}
67
68
static
inline
int
__xn_interrupted_p(
struct
pt_regs *regs)
69
{
70
return
__xn_reg_rval(regs) == -EINTR;
71
}
72
73
int
xnarch_local_syscall(
unsigned
long
a1,
unsigned
long
a2,
74
unsigned
long
a3,
unsigned
long
a4,
75
unsigned
long
a5);
76
77
#endif
/* !_COBALT_ARM64_ASM_SYSCALL_H */
kernel
cobalt
arch
arm64
include
asm
xenomai
syscall.h
Generated by
1.8.14