Home | History | Annotate | Download | only in tm
      1 /*
      2  * Copyright 2015, Michael Ellerman, IBM Corp.
      3  * Licensed under GPLv2.
      4  */
      5 
      6 #ifndef _SELFTESTS_POWERPC_TM_TM_H
      7 #define _SELFTESTS_POWERPC_TM_TM_H
      8 
      9 #include <asm/tm.h>
     10 #include <asm/cputable.h>
     11 #include <stdbool.h>
     12 
     13 #include "../utils.h"
     14 
     15 static inline bool have_htm(void)
     16 {
     17 #ifdef PPC_FEATURE2_HTM
     18 	return have_hwcap2(PPC_FEATURE2_HTM);
     19 #else
     20 	printf("PPC_FEATURE2_HTM not defined, can't check AT_HWCAP2\n");
     21 	return false;
     22 #endif
     23 }
     24 
     25 static inline bool have_htm_nosc(void)
     26 {
     27 #ifdef PPC_FEATURE2_HTM_NOSC
     28 	return have_hwcap2(PPC_FEATURE2_HTM_NOSC);
     29 #else
     30 	printf("PPC_FEATURE2_HTM_NOSC not defined, can't check AT_HWCAP2\n");
     31 	return false;
     32 #endif
     33 }
     34 
     35 static inline long failure_code(void)
     36 {
     37 	return __builtin_get_texasru() >> 24;
     38 }
     39 
     40 static inline bool failure_is_persistent(void)
     41 {
     42 	return (failure_code() & TM_CAUSE_PERSISTENT) == TM_CAUSE_PERSISTENT;
     43 }
     44 
     45 static inline bool failure_is_syscall(void)
     46 {
     47 	return (failure_code() & TM_CAUSE_SYSCALL) == TM_CAUSE_SYSCALL;
     48 }
     49 
     50 static inline bool failure_is_nesting(void)
     51 {
     52 	return (__builtin_get_texasru() & 0x400000);
     53 }
     54 
     55 #endif /* _SELFTESTS_POWERPC_TM_TM_H */
     56