Xenomai
3.1
syscall.h
1
/*
2
* Copyright (C) 2001,2002,2003,2004 Philippe Gerum <rpm@xenomai.org>.
3
*
4
* 64-bit PowerPC adoption
5
* copyright (C) 2005 Taneli Vähäkangas and Heikki Lindholm
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_POWERPC_ASM_SYSCALL_H
23
#define _COBALT_POWERPC_ASM_SYSCALL_H
24
25
#include <linux/errno.h>
26
#include <linux/ptrace.h>
27
#include <asm-generic/xenomai/syscall.h>
28
29
/*
30
* Cobalt and Linux syscall numbers can be fetched from GPR0, masking
31
* out the __COBALT_SYSCALL_BIT marker.
32
*/
33
#define __xn_reg_sys(__regs) ((__regs)->gpr[0])
34
#define __xn_syscall_p(__regs) (__xn_reg_sys(__regs) & __COBALT_SYSCALL_BIT)
35
#define __xn_syscall(__regs) (__xn_reg_sys(__regs) & ~__COBALT_SYSCALL_BIT)
36
37
#define __xn_reg_rval(__regs) ((__regs)->gpr[3])
38
#define __xn_reg_arg1(__regs) ((__regs)->gpr[3])
39
#define __xn_reg_arg2(__regs) ((__regs)->gpr[4])
40
#define __xn_reg_arg3(__regs) ((__regs)->gpr[5])
41
#define __xn_reg_arg4(__regs) ((__regs)->gpr[6])
42
#define __xn_reg_arg5(__regs) ((__regs)->gpr[7])
43
#define __xn_reg_pc(__regs) ((__regs)->nip)
44
#define __xn_reg_sp(__regs) ((__regs)->gpr[1])
45
46
/*
47
* Root syscall number with predicate (valid only if
48
* !__xn_syscall_p(__regs)).
49
*/
50
#define __xn_rootcall_p(__regs, __code) \
51
({ \
52
*(__code) = __xn_syscall(__regs); \
53
*(__code) < NR_syscalls; \
54
})
55
56
static
inline
void
__xn_error_return(
struct
pt_regs *regs,
int
v)
57
{
58
/*
59
* We currently never set the SO bit for marking errors, even
60
* if we always test it upon syscall return.
61
*/
62
__xn_reg_rval(regs) = v;
63
}
64
65
static
inline
void
__xn_status_return(
struct
pt_regs *regs,
long
v)
66
{
67
__xn_reg_rval(regs) = v;
68
}
69
70
static
inline
int
__xn_interrupted_p(
struct
pt_regs *regs)
71
{
72
return
__xn_reg_rval(regs) == -EINTR;
73
}
74
75
static
inline
76
int
xnarch_local_syscall(
unsigned
long
a1,
unsigned
long
a2,
77
unsigned
long
a3,
unsigned
long
a4,
78
unsigned
long
a5)
79
{
80
return
-ENOSYS;
81
}
82
83
#endif
/* !_COBALT_POWERPC_ASM_SYSCALL_H */
kernel
cobalt
arch
powerpc
include
asm
xenomai
syscall.h
Generated by
1.8.14