1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Support for s390 CPU measurement counter set diagnostic facility 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright IBM Corp. 2019 6*4882a593Smuzhiyun Author(s): Hendrik Brueckner <brueckner@linux.ibm.com> 7*4882a593Smuzhiyun * Thomas Richter <tmricht@linux.ibm.com> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun #ifndef S390_CPUMCF_KERNEL_H 10*4882a593Smuzhiyun #define S390_CPUMCF_KERNEL_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define S390_CPUMCF_DIAG_DEF 0xfeef /* Counter diagnostic entry ID */ 13*4882a593Smuzhiyun #define PERF_EVENT_CPUM_CF_DIAG 0xBC000 /* Event: Counter sets */ 14*4882a593Smuzhiyun #define PERF_EVENT_CPUM_SF_DIAG 0xBD000 /* Event: Combined-sampling */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun struct cf_ctrset_entry { /* CPU-M CF counter set entry (8 byte) */ 17*4882a593Smuzhiyun unsigned int def:16; /* 0-15 Data Entry Format */ 18*4882a593Smuzhiyun unsigned int set:16; /* 16-23 Counter set identifier */ 19*4882a593Smuzhiyun unsigned int ctr:16; /* 24-39 Number of stored counters */ 20*4882a593Smuzhiyun unsigned int res1:16; /* 40-63 Reserved */ 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun struct cf_trailer_entry { /* CPU-M CF trailer for raw traces (64 byte) */ 24*4882a593Smuzhiyun /* 0 - 7 */ 25*4882a593Smuzhiyun union { 26*4882a593Smuzhiyun struct { 27*4882a593Smuzhiyun unsigned int clock_base:1; /* TOD clock base */ 28*4882a593Smuzhiyun unsigned int speed:1; /* CPU speed */ 29*4882a593Smuzhiyun /* Measurement alerts */ 30*4882a593Smuzhiyun unsigned int mtda:1; /* Loss of MT ctr. data alert */ 31*4882a593Smuzhiyun unsigned int caca:1; /* Counter auth. change alert */ 32*4882a593Smuzhiyun unsigned int lcda:1; /* Loss of counter data alert */ 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun unsigned long flags; /* 0-63 All indicators */ 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun /* 8 - 15 */ 37*4882a593Smuzhiyun unsigned int cfvn:16; /* 64-79 Ctr First Version */ 38*4882a593Smuzhiyun unsigned int csvn:16; /* 80-95 Ctr Second Version */ 39*4882a593Smuzhiyun unsigned int cpu_speed:32; /* 96-127 CPU speed */ 40*4882a593Smuzhiyun /* 16 - 23 */ 41*4882a593Smuzhiyun unsigned long timestamp; /* 128-191 Timestamp (TOD) */ 42*4882a593Smuzhiyun /* 24 - 55 */ 43*4882a593Smuzhiyun union { 44*4882a593Smuzhiyun struct { 45*4882a593Smuzhiyun unsigned long progusage1; 46*4882a593Smuzhiyun unsigned long progusage2; 47*4882a593Smuzhiyun unsigned long progusage3; 48*4882a593Smuzhiyun unsigned long tod_base; 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun unsigned long progusage[4]; 51*4882a593Smuzhiyun }; 52*4882a593Smuzhiyun /* 56 - 63 */ 53*4882a593Smuzhiyun unsigned int mach_type:16; /* Machine type */ 54*4882a593Smuzhiyun unsigned int res1:16; /* Reserved */ 55*4882a593Smuzhiyun unsigned int res2:32; /* Reserved */ 56*4882a593Smuzhiyun }; 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define CPUMF_CTR_SET_BASIC 0 /* Basic Counter Set */ 59*4882a593Smuzhiyun #define CPUMF_CTR_SET_USER 1 /* Problem-State Counter Set */ 60*4882a593Smuzhiyun #define CPUMF_CTR_SET_CRYPTO 2 /* Crypto-Activity Counter Set */ 61*4882a593Smuzhiyun #define CPUMF_CTR_SET_EXT 3 /* Extended Counter Set */ 62*4882a593Smuzhiyun #define CPUMF_CTR_SET_MT_DIAG 4 /* MT-diagnostic Counter Set */ 63*4882a593Smuzhiyun #endif 64