arch/arch.h: Introduce atomic_{load_acquire,store_release}()
[fio.git] / arch / arch.h
CommitLineData
ebac4655
JA
1#ifndef ARCH_H
2#define ARCH_H
3
3932f8be
BVA
4#include <stdatomic.h>
5
24575392
JA
6#include "../lib/types.h"
7
ebac4655 8enum {
cca84643 9 arch_x86_64 = 1,
e12f4ede 10 arch_x86,
ebac4655
JA
11 arch_ppc,
12 arch_ia64,
13 arch_s390,
14 arch_alpha,
697a606c
JA
15 arch_sparc,
16 arch_sparc64,
a1ea676e 17 arch_arm,
29721c9c 18 arch_sh,
85a86319 19 arch_hppa,
5499f7ff 20 arch_mips,
78c8831e 21 arch_aarch64,
fa77073a
JA
22
23 arch_generic,
cca84643
JA
24
25 arch_nr,
ebac4655
JA
26};
27
5f739e0e
NI
28enum {
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
4247d1a9
JA
35extern unsigned long arch_flags;
36
96170421
CE
37#define ARCH_CPU_CLOCK_WRAPS
38
3932f8be
BVA
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
c473a9bd 46/* IWYU pragma: begin_exports */
ebac4655
JA
47#if defined(__i386__)
48#include "arch-x86.h"
49#elif defined(__x86_64__)
50#include "arch-x86_64.h"
2afd826b 51#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__)
ebac4655
JA
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"
697a606c
JA
59#elif defined(__sparc__)
60#include "arch-sparc.h"
61#elif defined(__sparc64__)
62#include "arch-sparc64.h"
a1ea676e
KS
63#elif defined(__arm__)
64#include "arch-arm.h"
c28b912f
JA
65#elif defined(__mips__) || defined(__mips64__)
66#include "arch-mips.h"
29721c9c
NI
67#elif defined(__sh__)
68#include "arch-sh.h"
85a86319
JA
69#elif defined(__hppa__)
70#include "arch-hppa.h"
78c8831e
DK
71#elif defined(__aarch64__)
72#include "arch-aarch64.h"
ebac4655 73#else
fa77073a
JA
74#warning "Unknown architecture, attempting to use generic model."
75#include "arch-generic.h"
ebac4655
JA
76#endif
77
8f7e39dd 78#include "../lib/ffz.h"
c473a9bd 79/* IWYU pragma: end_exports */
8f7e39dd 80
d3cc4ebf
JA
81#ifndef ARCH_HAVE_INIT
82static inline int arch_init(char *envp[])
83{
84 return 0;
85}
86#endif
87
bfed648c
JA
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
ebac4655 116#endif