1 #ifndef SVC_H 2 #define SVC_H 3 #include <asm/unistd.h> 4 #include <sys/syscall.h> 5 6 static inline long 7 svc0(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 19 static inline long 20 svc1(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 33 static inline long 34 svc2(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 49 static inline long 50 svc3(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 67 static inline long 68 svc4(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 86 static inline long 87 svc5(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