1#ifndef ARCH_S390_H
2#define ARCH_S390_H
3
4#define FIO_ARCH	(arch_s390)
5
6#ifndef __NR_ioprio_set
7#define __NR_ioprio_set		282
8#define __NR_ioprio_get		283
9#endif
10
11#ifndef __NR_fadvise64
12#define __NR_fadvise64		253
13#endif
14
15#ifndef __NR_sys_splice
16#define __NR_sys_splice		306
17#define __NR_sys_tee		308
18#define __NR_sys_vmsplice	309
19#endif
20
21#define nop		asm volatile("nop" : : : "memory")
22#define read_barrier()	asm volatile("bcr 15,0" : : : "memory")
23#define write_barrier()	asm volatile("bcr 15,0" : : : "memory")
24
25static inline unsigned long long get_cpu_clock(void)
26{
27	unsigned long long clk;
28
29#ifdef CONFIG_S390_Z196_FACILITIES
30	/*
31	 * Fio needs monotonic (never lower), but not strict monotonic (never
32	 * the same) so store clock fast is enough.
33	 */
34	__asm__ __volatile__("stckf %0" : "=Q" (clk) : : "cc");
35#else
36	__asm__ __volatile__("stck %0" : "=Q" (clk) : : "cc");
37#endif
38	return clk>>12;
39}
40
41#define ARCH_CPU_CLOCK_CYCLES_PER_USEC 1
42#define ARCH_HAVE_CPU_CLOCK
43#undef ARCH_CPU_CLOCK_WRAPS
44
45#define ARCH_HAVE_INIT
46extern int tsc_reliable;
47static inline int arch_init(char *envp[])
48{
49	tsc_reliable = 1;
50	return 0;
51}
52
53#endif
54