Home | History | Annotate | Download | only in include
      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 */
     78