Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
microblaze
include
asm
syscall.h
Go to the documentation of this file.
1
#ifndef __ASM_MICROBLAZE_SYSCALL_H
2
#define __ASM_MICROBLAZE_SYSCALL_H
3
4
#include <linux/kernel.h>
5
#include <linux/sched.h>
6
#include <asm/ptrace.h>
7
8
/* The system call number is given by the user in R12 */
9
static
inline
long
syscall_get_nr
(
struct
task_struct
*
task
,
10
struct
pt_regs
*
regs
)
11
{
12
return
regs->
r12
;
13
}
14
15
static
inline
void
syscall_rollback
(
struct
task_struct
*
task
,
16
struct
pt_regs
*
regs
)
17
{
18
/* TODO. */
19
}
20
21
static
inline
long
syscall_get_error
(
struct
task_struct
*
task
,
22
struct
pt_regs
*
regs
)
23
{
24
return
IS_ERR_VALUE
(regs->
r3
) ? regs->
r3
: 0;
25
}
26
27
static
inline
long
syscall_get_return_value
(
struct
task_struct
*
task
,
28
struct
pt_regs
*
regs
)
29
{
30
return
regs->
r3
;
31
}
32
33
static
inline
void
syscall_set_return_value
(
struct
task_struct
*
task
,
34
struct
pt_regs
*
regs
,
35
int
error
,
long
val
)
36
{
37
if
(error)
38
regs->
r3
= -
error
;
39
else
40
regs->
r3
=
val
;
41
}
42
43
static
inline
microblaze_reg_t
microblaze_get_syscall_arg(
struct
pt_regs
*regs,
44
unsigned
int
n
)
45
{
46
switch
(n) {
47
case
5:
return
regs->
r10
;
48
case
4:
return
regs->
r9
;
49
case
3:
return
regs->
r8
;
50
case
2:
return
regs->
r7
;
51
case
1:
return
regs->
r6
;
52
case
0:
return
regs->
r5
;
53
default
:
54
BUG
();
55
}
56
return
~0;
57
}
58
59
static
inline
void
microblaze_set_syscall_arg(
struct
pt_regs
*regs,
60
unsigned
int
n,
61
unsigned
long
val)
62
{
63
switch
(n) {
64
case
5:
65
regs->
r10
=
val
;
66
case
4:
67
regs->
r9
=
val
;
68
case
3:
69
regs->
r8
=
val
;
70
case
2:
71
regs->
r7
=
val
;
72
case
1:
73
regs->
r6
=
val
;
74
case
0:
75
regs->
r5
=
val
;
76
default
:
77
BUG
();
78
}
79
}
80
81
static
inline
void
syscall_get_arguments
(
struct
task_struct
*task,
82
struct
pt_regs
*regs,
83
unsigned
int
i
,
unsigned
int
n,
84
unsigned
long
*args)
85
{
86
while
(n--)
87
*args++ = microblaze_get_syscall_arg(regs, i++);
88
}
89
90
static
inline
void
syscall_set_arguments
(
struct
task_struct
*task,
91
struct
pt_regs
*regs,
92
unsigned
int
i,
unsigned
int
n,
93
const
unsigned
long
*args)
94
{
95
while
(n--)
96
microblaze_set_syscall_arg(regs, i++, *args++);
97
}
98
99
asmlinkage
long
do_syscall_trace_enter
(
struct
pt_regs
*regs);
100
asmlinkage
void
do_syscall_trace_leave
(
struct
pt_regs
*regs);
101
102
#endif
/* __ASM_MICROBLAZE_SYSCALL_H */
Generated on Thu Jan 10 2013 12:55:23 for Linux Kernel by
1.8.2