svc.h revision 436e89c602e787e7a27dd6624b09beed41a0da8a
1#ifndef SVC_H
2#define SVC_H
3#include <asm/unistd.h>
4#include <sys/syscall.h>
5
6static inline long
7svc0(int num)
8{
9  register int _num asm("1") = num;
10  register long ret asm("2");
11
12  asm volatile(	"svc 0\n"
13		:"=d"(ret)
14		: "d" (_num)
15		: "cc", "memory");
16  return ret;
17}
18
19static inline long
20svc1(int num, unsigned long arg1)
21{
22  register int _num asm("1") = num;
23  register long ret asm("2");
24  register unsigned long _arg1 asm("2") = arg1;
25
26  asm volatile(	"svc 0\n"
27		:"=d"(ret)
28		: "d" (_num), "d" (_arg1)
29		: "cc", "memory");
30  return ret;
31}
32
33static inline long
34svc2(int num, unsigned long arg1, unsigned long arg2)
35{
36  register int _num asm("1") = num;
37  register long ret asm("2");
38  register unsigned long _arg1 asm("2") = arg1;
39  register unsigned long _arg2 asm("3") = arg2;
40
41  asm volatile(	"svc 0\n"
42		:"=d"(ret)
43		: "d" (_num), "d" (_arg1), "d" (_arg2)
44		: "cc", "memory");
45  return ret;
46}
47
48
49static inline long
50svc3(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3)
51{
52  register int _num asm("1") = num;
53  register long ret asm("2");
54  register unsigned long _arg1 asm("2") = arg1;
55  register unsigned long _arg2 asm("3") = arg2;
56  register unsigned long _arg3 asm("4") = arg3;
57
58  asm volatile(	"svc 0\n"
59		:"=d"(ret)
60		: "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3)
61		: "cc", "memory");
62  return ret;
63}
64
65
66
67static inline long
68svc4(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4)
69{
70  register int _num asm("1") = num;
71  register long ret asm("2");
72  register unsigned long _arg1 asm("2") = arg1;
73  register unsigned long _arg2 asm("3") = arg2;
74  register unsigned long _arg3 asm("4") = arg3;
75  register unsigned long _arg4 asm("5") = arg4;
76
77  asm volatile(	"svc 0\n"
78		:"=d"(ret)
79		: "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3), "d" (_arg4)
80		: "cc", "memory");
81  return ret;
82}
83
84
85
86static inline long
87svc5(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4,
88	unsigned long arg5)
89{
90  register int _num asm("1") = num;
91  register long ret asm("2");
92  register unsigned long _arg1 asm("2") = arg1;
93  register unsigned long _arg2 asm("3") = arg2;
94  register unsigned long _arg3 asm("4") = arg3;
95  register unsigned long _arg4 asm("5") = arg4;
96  register unsigned long _arg5 asm("6") = arg5;
97
98  asm volatile(	"svc 0\n"
99		:"=d"(ret)
100		: "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3), "d" (_arg4), "d" (_arg5)
101		: "cc", "memory");
102  return ret;
103}
104
105#endif /* SVC_H */
106