1570af302Sopenharmony_ci#define __SYSCALL_LL_E(x) \ 2570af302Sopenharmony_ci((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ 3570af302Sopenharmony_ci((union { long long ll; long l[2]; }){ .ll = x }).l[1] 4570af302Sopenharmony_ci#define __SYSCALL_LL_O(x) __SYSCALL_LL_E((x)) 5570af302Sopenharmony_ci#define __SYSCALL_LL_PRW(x) 0, __SYSCALL_LL_E((x)) 6570af302Sopenharmony_ci 7570af302Sopenharmony_ci/* The extra OR instructions are to work around a hardware bug: 8570af302Sopenharmony_ci * http://documentation.renesas.com/doc/products/mpumcu/tu/tnsh7456ae.pdf 9570af302Sopenharmony_ci */ 10570af302Sopenharmony_ci#define __asm_syscall(trapno, ...) do { \ 11570af302Sopenharmony_ci __asm__ __volatile__ ( \ 12570af302Sopenharmony_ci "trapa #31\n" \ 13570af302Sopenharmony_ci "or r0, r0\n" \ 14570af302Sopenharmony_ci "or r0, r0\n" \ 15570af302Sopenharmony_ci "or r0, r0\n" \ 16570af302Sopenharmony_ci "or r0, r0\n" \ 17570af302Sopenharmony_ci "or r0, r0\n" \ 18570af302Sopenharmony_ci : "=r"(r0) : __VA_ARGS__ : "memory"); \ 19570af302Sopenharmony_ci return r0; \ 20570af302Sopenharmony_ci } while (0) 21570af302Sopenharmony_ci 22570af302Sopenharmony_cistatic inline long __syscall0(long n) 23570af302Sopenharmony_ci{ 24570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 25570af302Sopenharmony_ci register long r0 __asm__("r0"); 26570af302Sopenharmony_ci __asm_syscall(16, "r"(r3)); 27570af302Sopenharmony_ci} 28570af302Sopenharmony_ci 29570af302Sopenharmony_cistatic inline long __syscall1(long n, long a) 30570af302Sopenharmony_ci{ 31570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 32570af302Sopenharmony_ci register long r4 __asm__("r4") = a; 33570af302Sopenharmony_ci register long r0 __asm__("r0"); 34570af302Sopenharmony_ci __asm_syscall(17, "r"(r3), "r"(r4)); 35570af302Sopenharmony_ci} 36570af302Sopenharmony_ci 37570af302Sopenharmony_cistatic inline long __syscall2(long n, long a, long b) 38570af302Sopenharmony_ci{ 39570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 40570af302Sopenharmony_ci register long r4 __asm__("r4") = a; 41570af302Sopenharmony_ci register long r5 __asm__("r5") = b; 42570af302Sopenharmony_ci register long r0 __asm__("r0"); 43570af302Sopenharmony_ci __asm_syscall(18, "r"(r3), "r"(r4), "r"(r5)); 44570af302Sopenharmony_ci} 45570af302Sopenharmony_ci 46570af302Sopenharmony_cistatic inline long __syscall3(long n, long a, long b, long c) 47570af302Sopenharmony_ci{ 48570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 49570af302Sopenharmony_ci register long r4 __asm__("r4") = a; 50570af302Sopenharmony_ci register long r5 __asm__("r5") = b; 51570af302Sopenharmony_ci register long r6 __asm__("r6") = c; 52570af302Sopenharmony_ci register long r0 __asm__("r0"); 53570af302Sopenharmony_ci __asm_syscall(19, "r"(r3), "r"(r4), "r"(r5), "r"(r6)); 54570af302Sopenharmony_ci} 55570af302Sopenharmony_ci 56570af302Sopenharmony_cistatic inline long __syscall4(long n, long a, long b, long c, long d) 57570af302Sopenharmony_ci{ 58570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 59570af302Sopenharmony_ci register long r4 __asm__("r4") = a; 60570af302Sopenharmony_ci register long r5 __asm__("r5") = b; 61570af302Sopenharmony_ci register long r6 __asm__("r6") = c; 62570af302Sopenharmony_ci register long r7 __asm__("r7") = d; 63570af302Sopenharmony_ci register long r0 __asm__("r0"); 64570af302Sopenharmony_ci __asm_syscall(20, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7)); 65570af302Sopenharmony_ci} 66570af302Sopenharmony_ci 67570af302Sopenharmony_cistatic inline long __syscall5(long n, long a, long b, long c, long d, long e) 68570af302Sopenharmony_ci{ 69570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 70570af302Sopenharmony_ci register long r4 __asm__("r4") = a; 71570af302Sopenharmony_ci register long r5 __asm__("r5") = b; 72570af302Sopenharmony_ci register long r6 __asm__("r6") = c; 73570af302Sopenharmony_ci register long r7 __asm__("r7") = d; 74570af302Sopenharmony_ci register long r0 __asm__("r0") = e; 75570af302Sopenharmony_ci __asm_syscall(21, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "0"(r0)); 76570af302Sopenharmony_ci} 77570af302Sopenharmony_ci 78570af302Sopenharmony_cistatic inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) 79570af302Sopenharmony_ci{ 80570af302Sopenharmony_ci register long r3 __asm__("r3") = n; 81570af302Sopenharmony_ci register long r4 __asm__("r4") = a; 82570af302Sopenharmony_ci register long r5 __asm__("r5") = b; 83570af302Sopenharmony_ci register long r6 __asm__("r6") = c; 84570af302Sopenharmony_ci register long r7 __asm__("r7") = d; 85570af302Sopenharmony_ci register long r0 __asm__("r0") = e; 86570af302Sopenharmony_ci register long r1 __asm__("r1") = f; 87570af302Sopenharmony_ci __asm_syscall(22, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "0"(r0), "r"(r1)); 88570af302Sopenharmony_ci} 89570af302Sopenharmony_ci 90570af302Sopenharmony_ci#define SYSCALL_IPC_BROKEN_MODE 91570af302Sopenharmony_ci 92570af302Sopenharmony_ci#define SIOCGSTAMP_OLD (2U<<30 | 's'<<8 | 100 | 8<<16) 93570af302Sopenharmony_ci#define SIOCGSTAMPNS_OLD (2U<<30 | 's'<<8 | 101 | 8<<16) 94