#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 */