1*25da2beaSAndroid Build Coastguard Worker /* SPDX-License-Identifier: MIT */ 2*25da2beaSAndroid Build Coastguard Worker 3*25da2beaSAndroid Build Coastguard Worker #ifndef __INTERNAL__LIBURING_SYSCALL_H 4*25da2beaSAndroid Build Coastguard Worker #error "This file should be included from src/syscall.h (liburing)" 5*25da2beaSAndroid Build Coastguard Worker #endif 6*25da2beaSAndroid Build Coastguard Worker 7*25da2beaSAndroid Build Coastguard Worker #ifndef LIBURING_ARCH_AARCH64_SYSCALL_H 8*25da2beaSAndroid Build Coastguard Worker #define LIBURING_ARCH_AARCH64_SYSCALL_H 9*25da2beaSAndroid Build Coastguard Worker 10*25da2beaSAndroid Build Coastguard Worker #if defined(__aarch64__) 11*25da2beaSAndroid Build Coastguard Worker 12*25da2beaSAndroid Build Coastguard Worker #define __do_syscallN(...) ({ \ 13*25da2beaSAndroid Build Coastguard Worker __asm__ volatile ( \ 14*25da2beaSAndroid Build Coastguard Worker "svc 0" \ 15*25da2beaSAndroid Build Coastguard Worker : "=r"(x0) \ 16*25da2beaSAndroid Build Coastguard Worker : __VA_ARGS__ \ 17*25da2beaSAndroid Build Coastguard Worker : "memory", "cc"); \ 18*25da2beaSAndroid Build Coastguard Worker (long) x0; \ 19*25da2beaSAndroid Build Coastguard Worker }) 20*25da2beaSAndroid Build Coastguard Worker 21*25da2beaSAndroid Build Coastguard Worker #define __do_syscall0(__n) ({ \ 22*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 23*25da2beaSAndroid Build Coastguard Worker register long x0 __asm__("x0"); \ 24*25da2beaSAndroid Build Coastguard Worker \ 25*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8)); \ 26*25da2beaSAndroid Build Coastguard Worker }) 27*25da2beaSAndroid Build Coastguard Worker 28*25da2beaSAndroid Build Coastguard Worker #define __do_syscall1(__n, __a) ({ \ 29*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 30*25da2beaSAndroid Build Coastguard Worker register __typeof__(__a) x0 __asm__("x0") = __a; \ 31*25da2beaSAndroid Build Coastguard Worker \ 32*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8), "0" (x0)); \ 33*25da2beaSAndroid Build Coastguard Worker }) 34*25da2beaSAndroid Build Coastguard Worker 35*25da2beaSAndroid Build Coastguard Worker #define __do_syscall2(__n, __a, __b) ({ \ 36*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 37*25da2beaSAndroid Build Coastguard Worker register __typeof__(__a) x0 __asm__("x0") = __a; \ 38*25da2beaSAndroid Build Coastguard Worker register __typeof__(__b) x1 __asm__("x1") = __b; \ 39*25da2beaSAndroid Build Coastguard Worker \ 40*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8), "0" (x0), "r" (x1)); \ 41*25da2beaSAndroid Build Coastguard Worker }) 42*25da2beaSAndroid Build Coastguard Worker 43*25da2beaSAndroid Build Coastguard Worker #define __do_syscall3(__n, __a, __b, __c) ({ \ 44*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 45*25da2beaSAndroid Build Coastguard Worker register __typeof__(__a) x0 __asm__("x0") = __a; \ 46*25da2beaSAndroid Build Coastguard Worker register __typeof__(__b) x1 __asm__("x1") = __b; \ 47*25da2beaSAndroid Build Coastguard Worker register __typeof__(__c) x2 __asm__("x2") = __c; \ 48*25da2beaSAndroid Build Coastguard Worker \ 49*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2)); \ 50*25da2beaSAndroid Build Coastguard Worker }) 51*25da2beaSAndroid Build Coastguard Worker 52*25da2beaSAndroid Build Coastguard Worker #define __do_syscall4(__n, __a, __b, __c, __d) ({ \ 53*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 54*25da2beaSAndroid Build Coastguard Worker register __typeof__(__a) x0 __asm__("x0") = __a; \ 55*25da2beaSAndroid Build Coastguard Worker register __typeof__(__b) x1 __asm__("x1") = __b; \ 56*25da2beaSAndroid Build Coastguard Worker register __typeof__(__c) x2 __asm__("x2") = __c; \ 57*25da2beaSAndroid Build Coastguard Worker register __typeof__(__d) x3 __asm__("x3") = __d; \ 58*25da2beaSAndroid Build Coastguard Worker \ 59*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3));\ 60*25da2beaSAndroid Build Coastguard Worker }) 61*25da2beaSAndroid Build Coastguard Worker 62*25da2beaSAndroid Build Coastguard Worker #define __do_syscall5(__n, __a, __b, __c, __d, __e) ({ \ 63*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 64*25da2beaSAndroid Build Coastguard Worker register __typeof__(__a) x0 __asm__("x0") = __a; \ 65*25da2beaSAndroid Build Coastguard Worker register __typeof__(__b) x1 __asm__("x1") = __b; \ 66*25da2beaSAndroid Build Coastguard Worker register __typeof__(__c) x2 __asm__("x2") = __c; \ 67*25da2beaSAndroid Build Coastguard Worker register __typeof__(__d) x3 __asm__("x3") = __d; \ 68*25da2beaSAndroid Build Coastguard Worker register __typeof__(__e) x4 __asm__("x4") = __e; \ 69*25da2beaSAndroid Build Coastguard Worker \ 70*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3), \ 71*25da2beaSAndroid Build Coastguard Worker "r"(x4)); \ 72*25da2beaSAndroid Build Coastguard Worker }) 73*25da2beaSAndroid Build Coastguard Worker 74*25da2beaSAndroid Build Coastguard Worker #define __do_syscall6(__n, __a, __b, __c, __d, __e, __f) ({ \ 75*25da2beaSAndroid Build Coastguard Worker register long x8 __asm__("x8") = __n; \ 76*25da2beaSAndroid Build Coastguard Worker register __typeof__(__a) x0 __asm__("x0") = __a; \ 77*25da2beaSAndroid Build Coastguard Worker register __typeof__(__b) x1 __asm__("x1") = __b; \ 78*25da2beaSAndroid Build Coastguard Worker register __typeof__(__c) x2 __asm__("x2") = __c; \ 79*25da2beaSAndroid Build Coastguard Worker register __typeof__(__d) x3 __asm__("x3") = __d; \ 80*25da2beaSAndroid Build Coastguard Worker register __typeof__(__e) x4 __asm__("x4") = __e; \ 81*25da2beaSAndroid Build Coastguard Worker register __typeof__(__f) x5 __asm__("x5") = __f; \ 82*25da2beaSAndroid Build Coastguard Worker \ 83*25da2beaSAndroid Build Coastguard Worker __do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3), \ 84*25da2beaSAndroid Build Coastguard Worker "r" (x4), "r"(x5)); \ 85*25da2beaSAndroid Build Coastguard Worker }) 86*25da2beaSAndroid Build Coastguard Worker 87*25da2beaSAndroid Build Coastguard Worker #include "../syscall-defs.h" 88*25da2beaSAndroid Build Coastguard Worker 89*25da2beaSAndroid Build Coastguard Worker #else /* #if defined(__aarch64__) */ 90*25da2beaSAndroid Build Coastguard Worker 91*25da2beaSAndroid Build Coastguard Worker #include "../generic/syscall.h" 92*25da2beaSAndroid Build Coastguard Worker 93*25da2beaSAndroid Build Coastguard Worker #endif /* #if defined(__aarch64__) */ 94*25da2beaSAndroid Build Coastguard Worker 95*25da2beaSAndroid Build Coastguard Worker #endif /* #ifndef LIBURING_ARCH_AARCH64_SYSCALL_H */ 96