Merge tag 'powerpc-4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[cascardo/linux.git] / tools / testing / selftests / powerpc / utils.h
1 /*
2  * Copyright 2013, Michael Ellerman, IBM Corp.
3  * Licensed under GPLv2.
4  */
5
6 #ifndef _SELFTESTS_POWERPC_UTILS_H
7 #define _SELFTESTS_POWERPC_UTILS_H
8
9 #define __cacheline_aligned __attribute__((aligned(128)))
10
11 #include <stdint.h>
12 #include <stdbool.h>
13 #include <linux/auxvec.h>
14 #include "reg.h"
15
16 /* Avoid headaches with PRI?64 - just use %ll? always */
17 typedef unsigned long long u64;
18 typedef   signed long long s64;
19
20 /* Just for familiarity */
21 typedef uint32_t u32;
22 typedef uint16_t u16;
23 typedef uint8_t u8;
24
25 void test_harness_set_timeout(uint64_t time);
26 int test_harness(int (test_function)(void), char *name);
27 extern void *get_auxv_entry(int type);
28 int pick_online_cpu(void);
29
30 static inline bool have_hwcap(unsigned long ftr)
31 {
32         return ((unsigned long)get_auxv_entry(AT_HWCAP) & ftr) == ftr;
33 }
34
35 #ifdef AT_HWCAP2
36 static inline bool have_hwcap2(unsigned long ftr2)
37 {
38         return ((unsigned long)get_auxv_entry(AT_HWCAP2) & ftr2) == ftr2;
39 }
40 #else
41 static inline bool have_hwcap2(unsigned long ftr2)
42 {
43         return false;
44 }
45 #endif
46
47 /* Yes, this is evil */
48 #define FAIL_IF(x)                                              \
49 do {                                                            \
50         if ((x)) {                                              \
51                 fprintf(stderr,                                 \
52                 "[FAIL] Test FAILED on line %d\n", __LINE__);   \
53                 return 1;                                       \
54         }                                                       \
55 } while (0)
56
57 /* The test harness uses this, yes it's gross */
58 #define MAGIC_SKIP_RETURN_VALUE 99
59
60 #define SKIP_IF(x)                                              \
61 do {                                                            \
62         if ((x)) {                                              \
63                 fprintf(stderr,                                 \
64                 "[SKIP] Test skipped on line %d\n", __LINE__);  \
65                 return MAGIC_SKIP_RETURN_VALUE;                 \
66         }                                                       \
67 } while (0)
68
69 #define _str(s) #s
70 #define str(s) _str(s)
71
72 /* POWER9 feature */
73 #ifndef PPC_FEATURE2_ARCH_3_00
74 #define PPC_FEATURE2_ARCH_3_00 0x00800000
75 #endif
76
77 #endif /* _SELFTESTS_POWERPC_UTILS_H */