t/zbd: add test case to check zones in closed condition
[fio.git] / arch / arch.h
CommitLineData
ebac4655
JA
1#ifndef ARCH_H
2#define ARCH_H
3
33ab6905
KC
4#ifdef __cplusplus
5#include <atomic>
6#else
3932f8be 7#include <stdatomic.h>
33ab6905 8#endif
3932f8be 9
24575392
JA
10#include "../lib/types.h"
11
ebac4655 12enum {
cca84643 13 arch_x86_64 = 1,
e12f4ede 14 arch_x86,
ebac4655
JA
15 arch_ppc,
16 arch_ia64,
17 arch_s390,
18 arch_alpha,
697a606c
JA
19 arch_sparc,
20 arch_sparc64,
a1ea676e 21 arch_arm,
29721c9c 22 arch_sh,
85a86319 23 arch_hppa,
5499f7ff 24 arch_mips,
78c8831e 25 arch_aarch64,
9496e398 26 arch_loongarch64,
fa77073a
JA
27
28 arch_generic,
cca84643
JA
29
30 arch_nr,
ebac4655
JA
31};
32
5f739e0e
NI
33enum {
34 ARCH_FLAG_1 = 1 << 0,
35 ARCH_FLAG_2 = 1 << 1,
36 ARCH_FLAG_3 = 1 << 2,
37 ARCH_FLAG_4 = 1 << 3,
38};
39
4247d1a9
JA
40extern unsigned long arch_flags;
41
96170421
CE
42#define ARCH_CPU_CLOCK_WRAPS
43
33ab6905
KC
44#ifdef __cplusplus
45#define atomic_add(p, v) \
46 std::atomic_fetch_add(p, (v))
47#define atomic_sub(p, v) \
48 std::atomic_fetch_sub(p, (v))
49#define atomic_load_relaxed(p) \
50 std::atomic_load_explicit(p, \
51 std::memory_order_relaxed)
52#define atomic_load_acquire(p) \
53 std::atomic_load_explicit(p, \
54 std::memory_order_acquire)
55#define atomic_store_release(p, v) \
56 std::atomic_store_explicit(p, (v), \
57 std::memory_order_release)
58#else
d4e74fda
DB
59#define atomic_add(p, v) \
60 atomic_fetch_add((_Atomic typeof(*(p)) *)(p), v)
61#define atomic_sub(p, v) \
62 atomic_fetch_sub((_Atomic typeof(*(p)) *)(p), v)
63#define atomic_load_relaxed(p) \
64 atomic_load_explicit((_Atomic typeof(*(p)) *)(p), \
65 memory_order_relaxed)
3932f8be
BVA
66#define atomic_load_acquire(p) \
67 atomic_load_explicit((_Atomic typeof(*(p)) *)(p), \
68 memory_order_acquire)
69#define atomic_store_release(p, v) \
70 atomic_store_explicit((_Atomic typeof(*(p)) *)(p), (v), \
71 memory_order_release)
33ab6905 72#endif
3932f8be 73
c473a9bd 74/* IWYU pragma: begin_exports */
ebac4655
JA
75#if defined(__i386__)
76#include "arch-x86.h"
77#elif defined(__x86_64__)
78#include "arch-x86_64.h"
2afd826b 79#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__)
ebac4655
JA
80#include "arch-ppc.h"
81#elif defined(__ia64__)
82#include "arch-ia64.h"
83#elif defined(__alpha__)
84#include "arch-alpha.h"
85#elif defined(__s390x__) || defined(__s390__)
86#include "arch-s390.h"
697a606c
JA
87#elif defined(__sparc__)
88#include "arch-sparc.h"
89#elif defined(__sparc64__)
90#include "arch-sparc64.h"
a1ea676e
KS
91#elif defined(__arm__)
92#include "arch-arm.h"
c28b912f
JA
93#elif defined(__mips__) || defined(__mips64__)
94#include "arch-mips.h"
29721c9c
NI
95#elif defined(__sh__)
96#include "arch-sh.h"
85a86319
JA
97#elif defined(__hppa__)
98#include "arch-hppa.h"
78c8831e
DK
99#elif defined(__aarch64__)
100#include "arch-aarch64.h"
9496e398
JH
101#elif defined(__loongarch64)
102#include "arch-loongarch64.h"
ebac4655 103#else
fa77073a
JA
104#warning "Unknown architecture, attempting to use generic model."
105#include "arch-generic.h"
ebac4655
JA
106#endif
107
8f7e39dd 108#include "../lib/ffz.h"
c473a9bd 109/* IWYU pragma: end_exports */
8f7e39dd 110
d3cc4ebf
JA
111#ifndef ARCH_HAVE_INIT
112static inline int arch_init(char *envp[])
113{
114 return 0;
115}
116#endif
117
bfed648c
JA
118#ifdef __alpha__
119/*
120 * alpha is the only exception, all other architectures
121 * have common numbers for new system calls.
122 */
123# ifndef __NR_io_uring_setup
124# define __NR_io_uring_setup 535
125# endif
126# ifndef __NR_io_uring_enter
127# define __NR_io_uring_enter 536
128# endif
129# ifndef __NR_io_uring_register
130# define __NR_io_uring_register 537
131# endif
132#else /* !__alpha__ */
133# ifndef __NR_io_uring_setup
134# define __NR_io_uring_setup 425
135# endif
136# ifndef __NR_io_uring_enter
137# define __NR_io_uring_enter 426
138# endif
139# ifndef __NR_io_uring_register
140# define __NR_io_uring_register 427
141# endif
142#endif
143
144#define ARCH_HAVE_IOURING
145
ebac4655 146#endif