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