#ifndef SVC_H #define SVC_H #include <asm/unistd.h> #include <sys/syscall.h> static inline long svc0(int num) { register int _num asm("1") = num; register long ret asm("2"); asm volatile( "svc 0\n" :"=d"(ret) : "d" (_num) : "cc", "memory"); return ret; } static inline long svc1(int num, unsigned long arg1) { register int _num asm("1") = num; register long ret asm("2"); register unsigned long _arg1 asm("2") = arg1; asm volatile( "svc 0\n" :"=d"(ret) : "d" (_num), "d" (_arg1) : "cc", "memory"); return ret; } static inline long svc2(int num, unsigned long arg1, unsigned long arg2) { register int _num asm("1") = num; register long ret asm("2"); register unsigned long _arg1 asm("2") = arg1; register unsigned long _arg2 asm("3") = arg2; asm volatile( "svc 0\n" :"=d"(ret) : "d" (_num), "d" (_arg1), "d" (_arg2) : "cc", "memory"); return ret; } static inline long svc3(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3) { register int _num asm("1") = num; register long ret asm("2"); register unsigned long _arg1 asm("2") = arg1; register unsigned long _arg2 asm("3") = arg2; register unsigned long _arg3 asm("4") = arg3; asm volatile( "svc 0\n" :"=d"(ret) : "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3) : "cc", "memory"); return ret; } static inline long svc4(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4) { register int _num asm("1") = num; register long ret asm("2"); register unsigned long _arg1 asm("2") = arg1; register unsigned long _arg2 asm("3") = arg2; register unsigned long _arg3 asm("4") = arg3; register unsigned long _arg4 asm("5") = arg4; asm volatile( "svc 0\n" :"=d"(ret) : "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3), "d" (_arg4) : "cc", "memory"); return ret; } static inline long svc5(int num, unsigned long arg1, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) { register int _num asm("1") = num; register long ret asm("2"); register unsigned long _arg1 asm("2") = arg1; register unsigned long _arg2 asm("3") = arg2; register unsigned long _arg3 asm("4") = arg3; register unsigned long _arg4 asm("5") = arg4; register unsigned long _arg5 asm("6") = arg5; asm volatile( "svc 0\n" :"=d"(ret) : "d" (_num), "d" (_arg1), "d" (_arg2), "d" (_arg3), "d" (_arg4), "d" (_arg5) : "cc", "memory"); return ret; } #endif /* SVC_H */