xref: /aosp_15_r20/external/liburing/src/syscall.h (revision 25da2bea747f3a93b4c30fd9708b0618ef55a0e6)
1*25da2beaSAndroid Build Coastguard Worker /* SPDX-License-Identifier: MIT */
2*25da2beaSAndroid Build Coastguard Worker #ifndef LIBURING_SYSCALL_H
3*25da2beaSAndroid Build Coastguard Worker #define LIBURING_SYSCALL_H
4*25da2beaSAndroid Build Coastguard Worker 
5*25da2beaSAndroid Build Coastguard Worker #include <errno.h>
6*25da2beaSAndroid Build Coastguard Worker #include <signal.h>
7*25da2beaSAndroid Build Coastguard Worker #include <stdint.h>
8*25da2beaSAndroid Build Coastguard Worker #include <unistd.h>
9*25da2beaSAndroid Build Coastguard Worker #include <stdbool.h>
10*25da2beaSAndroid Build Coastguard Worker #include <sys/mman.h>
11*25da2beaSAndroid Build Coastguard Worker #include <sys/syscall.h>
12*25da2beaSAndroid Build Coastguard Worker #include <sys/resource.h>
13*25da2beaSAndroid Build Coastguard Worker 
14*25da2beaSAndroid Build Coastguard Worker #include <liburing.h>
15*25da2beaSAndroid Build Coastguard Worker 
16*25da2beaSAndroid Build Coastguard Worker #ifdef __alpha__
17*25da2beaSAndroid Build Coastguard Worker /*
18*25da2beaSAndroid Build Coastguard Worker  * alpha and mips are exception, other architectures have
19*25da2beaSAndroid Build Coastguard Worker  * common numbers for new system calls.
20*25da2beaSAndroid Build Coastguard Worker  */
21*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_setup
22*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_setup		535
23*25da2beaSAndroid Build Coastguard Worker #endif
24*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_enter
25*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_enter		536
26*25da2beaSAndroid Build Coastguard Worker #endif
27*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_register
28*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_register	537
29*25da2beaSAndroid Build Coastguard Worker #endif
30*25da2beaSAndroid Build Coastguard Worker #elif defined __mips__
31*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_setup
32*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_setup		(__NR_Linux + 425)
33*25da2beaSAndroid Build Coastguard Worker #endif
34*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_enter
35*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_enter		(__NR_Linux + 426)
36*25da2beaSAndroid Build Coastguard Worker #endif
37*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_register
38*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_register	(__NR_Linux + 427)
39*25da2beaSAndroid Build Coastguard Worker #endif
40*25da2beaSAndroid Build Coastguard Worker #else /* !__alpha__ and !__mips__ */
41*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_setup
42*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_setup		425
43*25da2beaSAndroid Build Coastguard Worker #endif
44*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_enter
45*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_enter		426
46*25da2beaSAndroid Build Coastguard Worker #endif
47*25da2beaSAndroid Build Coastguard Worker #ifndef __NR_io_uring_register
48*25da2beaSAndroid Build Coastguard Worker #define __NR_io_uring_register		427
49*25da2beaSAndroid Build Coastguard Worker #endif
50*25da2beaSAndroid Build Coastguard Worker #endif
51*25da2beaSAndroid Build Coastguard Worker 
52*25da2beaSAndroid Build Coastguard Worker /*
53*25da2beaSAndroid Build Coastguard Worker  * Don't put this below the #include "arch/$arch/syscall.h", that
54*25da2beaSAndroid Build Coastguard Worker  * file may need it.
55*25da2beaSAndroid Build Coastguard Worker  */
56*25da2beaSAndroid Build Coastguard Worker struct io_uring_params;
57*25da2beaSAndroid Build Coastguard Worker 
ERR_PTR(intptr_t n)58*25da2beaSAndroid Build Coastguard Worker static inline void *ERR_PTR(intptr_t n)
59*25da2beaSAndroid Build Coastguard Worker {
60*25da2beaSAndroid Build Coastguard Worker 	return (void *) n;
61*25da2beaSAndroid Build Coastguard Worker }
62*25da2beaSAndroid Build Coastguard Worker 
PTR_ERR(const void * ptr)63*25da2beaSAndroid Build Coastguard Worker static inline intptr_t PTR_ERR(const void *ptr)
64*25da2beaSAndroid Build Coastguard Worker {
65*25da2beaSAndroid Build Coastguard Worker 	return (intptr_t) ptr;
66*25da2beaSAndroid Build Coastguard Worker }
67*25da2beaSAndroid Build Coastguard Worker 
IS_ERR(const void * ptr)68*25da2beaSAndroid Build Coastguard Worker static inline bool IS_ERR(const void *ptr)
69*25da2beaSAndroid Build Coastguard Worker {
70*25da2beaSAndroid Build Coastguard Worker 	return uring_unlikely((uintptr_t) ptr >= (uintptr_t) -4095UL);
71*25da2beaSAndroid Build Coastguard Worker }
72*25da2beaSAndroid Build Coastguard Worker 
73*25da2beaSAndroid Build Coastguard Worker #define __INTERNAL__LIBURING_SYSCALL_H
74*25da2beaSAndroid Build Coastguard Worker #if defined(__x86_64__) || defined(__i386__)
75*25da2beaSAndroid Build Coastguard Worker #include "arch/x86/syscall.h"
76*25da2beaSAndroid Build Coastguard Worker #elif defined(__aarch64__)
77*25da2beaSAndroid Build Coastguard Worker #include "arch/aarch64/syscall.h"
78*25da2beaSAndroid Build Coastguard Worker #else
79*25da2beaSAndroid Build Coastguard Worker /*
80*25da2beaSAndroid Build Coastguard Worker  * We don't have native syscall wrappers
81*25da2beaSAndroid Build Coastguard Worker  * for this arch. Must use libc!
82*25da2beaSAndroid Build Coastguard Worker  */
83*25da2beaSAndroid Build Coastguard Worker #ifdef CONFIG_NOLIBC
84*25da2beaSAndroid Build Coastguard Worker 	#error "This arch doesn't support building liburing without libc"
85*25da2beaSAndroid Build Coastguard Worker #endif
86*25da2beaSAndroid Build Coastguard Worker /* libc syscall wrappers. */
87*25da2beaSAndroid Build Coastguard Worker #include "arch/generic/syscall.h"
88*25da2beaSAndroid Build Coastguard Worker #endif
89*25da2beaSAndroid Build Coastguard Worker #undef __INTERNAL__LIBURING_SYSCALL_H
90*25da2beaSAndroid Build Coastguard Worker 
91*25da2beaSAndroid Build Coastguard Worker /*
92*25da2beaSAndroid Build Coastguard Worker  * For backward compatibility.
93*25da2beaSAndroid Build Coastguard Worker  * (these __sys* functions always use libc, see syscall.c)
94*25da2beaSAndroid Build Coastguard Worker  */
95*25da2beaSAndroid Build Coastguard Worker int __sys_io_uring_setup(unsigned entries, struct io_uring_params *p);
96*25da2beaSAndroid Build Coastguard Worker int __sys_io_uring_enter(int fd, unsigned to_submit, unsigned min_complete,
97*25da2beaSAndroid Build Coastguard Worker 			 unsigned flags, sigset_t *sig);
98*25da2beaSAndroid Build Coastguard Worker int __sys_io_uring_enter2(int fd, unsigned to_submit, unsigned min_complete,
99*25da2beaSAndroid Build Coastguard Worker 			  unsigned flags, sigset_t *sig, int sz);
100*25da2beaSAndroid Build Coastguard Worker int __sys_io_uring_register(int fd, unsigned int opcode, const void *arg,
101*25da2beaSAndroid Build Coastguard Worker 			    unsigned int nr_args);
102*25da2beaSAndroid Build Coastguard Worker 
103*25da2beaSAndroid Build Coastguard Worker #endif
104