Merge branch 'master' of https://github.com/donny372/fio into master
[fio.git] / arch / arch.h
1 #ifndef ARCH_H
2 #define ARCH_H
3
4 #include <stdatomic.h>
5
6 #include "../lib/types.h"
7
8 enum {
9         arch_x86_64 = 1,
10         arch_x86,
11         arch_ppc,
12         arch_ia64,
13         arch_s390,
14         arch_alpha,
15         arch_sparc,
16         arch_sparc64,
17         arch_arm,
18         arch_sh,
19         arch_hppa,
20         arch_mips,
21         arch_aarch64,
22
23         arch_generic,
24
25         arch_nr,
26 };
27
28 enum {
29         ARCH_FLAG_1     = 1 << 0,
30         ARCH_FLAG_2     = 1 << 1,
31         ARCH_FLAG_3     = 1 << 2,
32         ARCH_FLAG_4     = 1 << 3,
33 };
34
35 extern unsigned long arch_flags;
36
37 #define ARCH_CPU_CLOCK_WRAPS
38
39 #define atomic_load_acquire(p)                                  \
40         atomic_load_explicit((_Atomic typeof(*(p)) *)(p),       \
41                              memory_order_acquire)
42 #define atomic_store_release(p, v)                              \
43         atomic_store_explicit((_Atomic typeof(*(p)) *)(p), (v), \
44                               memory_order_release)
45
46 /* IWYU pragma: begin_exports */
47 #if defined(__i386__)
48 #include "arch-x86.h"
49 #elif defined(__x86_64__)
50 #include "arch-x86_64.h"
51 #elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__)
52 #include "arch-ppc.h"
53 #elif defined(__ia64__)
54 #include "arch-ia64.h"
55 #elif defined(__alpha__)
56 #include "arch-alpha.h"
57 #elif defined(__s390x__) || defined(__s390__)
58 #include "arch-s390.h"
59 #elif defined(__sparc__)
60 #include "arch-sparc.h"
61 #elif defined(__sparc64__)
62 #include "arch-sparc64.h"
63 #elif defined(__arm__)
64 #include "arch-arm.h"
65 #elif defined(__mips__) || defined(__mips64__)
66 #include "arch-mips.h"
67 #elif defined(__sh__)
68 #include "arch-sh.h"
69 #elif defined(__hppa__)
70 #include "arch-hppa.h"
71 #elif defined(__aarch64__)
72 #include "arch-aarch64.h"
73 #else
74 #warning "Unknown architecture, attempting to use generic model."
75 #include "arch-generic.h"
76 #endif
77
78 #include "../lib/ffz.h"
79 /* IWYU pragma: end_exports */
80
81 #ifndef ARCH_HAVE_INIT
82 static inline int arch_init(char *envp[])
83 {
84         return 0;
85 }
86 #endif
87
88 #ifdef __alpha__
89 /*
90  * alpha is the only exception, all other architectures
91  * have common numbers for new system calls.
92  */
93 # ifndef __NR_io_uring_setup
94 #  define __NR_io_uring_setup           535
95 # endif
96 # ifndef __NR_io_uring_enter
97 #  define __NR_io_uring_enter           536
98 # endif
99 # ifndef __NR_io_uring_register
100 #  define __NR_io_uring_register        537
101 # endif
102 #else /* !__alpha__ */
103 # ifndef __NR_io_uring_setup
104 #  define __NR_io_uring_setup           425
105 # endif
106 # ifndef __NR_io_uring_enter
107 #  define __NR_io_uring_enter           426
108 # endif
109 # ifndef __NR_io_uring_register
110 #  define __NR_io_uring_register        427
111 # endif
112 #endif
113
114 #define ARCH_HAVE_IOURING
115
116 #endif