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