io_uring: system calls have been renumbered
[fio.git] / arch / arch-x86-common.h
... / ...
CommitLineData
1#ifndef FIO_ARCH_X86_COMMON
2#define FIO_ARCH_X86_COMMON
3
4#include <string.h>
5
6#ifndef __NR_sys_io_uring_setup
7#define __NR_sys_io_uring_setup 425
8#endif
9#ifndef __NR_sys_io_uring_enter
10#define __NR_sys_io_uring_enter 426
11#endif
12#ifndef __NR_sys_io_uring_register
13#define __NR_sys_io_uring_register 427
14#endif
15
16static inline void cpuid(unsigned int op,
17 unsigned int *eax, unsigned int *ebx,
18 unsigned int *ecx, unsigned int *edx)
19{
20 *eax = op;
21 *ecx = 0;
22 do_cpuid(eax, ebx, ecx, edx);
23}
24
25#define ARCH_HAVE_INIT
26#define ARCH_HAVE_IOURING
27
28extern bool tsc_reliable;
29extern int arch_random;
30
31static inline void arch_init_intel(void)
32{
33 unsigned int eax, ebx, ecx = 0, edx;
34
35 /*
36 * Check for TSC
37 */
38 eax = 1;
39 do_cpuid(&eax, &ebx, &ecx, &edx);
40 if (!(edx & (1U << 4)))
41 return;
42
43 /*
44 * Check for constant rate and synced (across cores) TSC
45 */
46 eax = 0x80000007;
47 do_cpuid(&eax, &ebx, &ecx, &edx);
48 tsc_reliable = (edx & (1U << 8)) != 0;
49
50 /*
51 * Check for FDRAND
52 */
53 eax = 0x1;
54 do_cpuid(&eax, &ebx, &ecx, &edx);
55 arch_random = (ecx & (1U << 30)) != 0;
56}
57
58static inline void arch_init_amd(void)
59{
60 unsigned int eax, ebx, ecx, edx;
61
62 cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
63 if (eax < 0x80000007)
64 return;
65
66 cpuid(0x80000007, &eax, &ebx, &ecx, &edx);
67 tsc_reliable = (edx & (1U << 8)) != 0;
68}
69
70static inline void arch_init(char *envp[])
71{
72 unsigned int level;
73 char str[13];
74
75 arch_random = tsc_reliable = 0;
76
77 cpuid(0, &level, (unsigned int *) &str[0],
78 (unsigned int *) &str[8],
79 (unsigned int *) &str[4]);
80
81 str[12] = '\0';
82 if (!strcmp(str, "GenuineIntel"))
83 arch_init_intel();
84 else if (!strcmp(str, "AuthenticAMD"))
85 arch_init_amd();
86}
87
88#endif