1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 /* 3 * Copyright IBM Corp. 2021 4 * Interface implementation for communication with the CPU Measurement 5 * counter facility device driver. 6 * 7 * Author(s): Thomas Richter <tmricht@linux.ibm.com> 8 * 9 * Define for ioctl() commands to communicate with the CPU Measurement 10 * counter facility device driver. 11 */ 12 13 #ifndef _PERF_CPUM_CF_DIAG_H 14 #define _PERF_CPUM_CF_DIAG_H 15 16 #include <linux/ioctl.h> 17 #include <linux/types.h> 18 19 #define S390_HWCTR_DEVICE "hwctr" 20 #define S390_HWCTR_START_VERSION 1 21 22 struct s390_ctrset_start { /* Set CPUs to operate on */ 23 __u64 version; /* Version of interface */ 24 __u64 data_bytes; /* # of bytes required */ 25 __u64 cpumask_len; /* Length of CPU mask in bytes */ 26 __u64 *cpumask; /* Pointer to CPU mask */ 27 __u64 counter_sets; /* Bit mask of counter sets to get */ 28 }; 29 30 struct s390_ctrset_setdata { /* Counter set data */ 31 __u32 set; /* Counter set number */ 32 __u32 no_cnts; /* # of counters stored in cv[] */ 33 __u64 cv[]; /* Counter values (variable length) */ 34 }; 35 36 struct s390_ctrset_cpudata { /* Counter set data per CPU */ 37 __u32 cpu_nr; /* CPU number */ 38 __u32 no_sets; /* # of counters sets in data[] */ 39 struct s390_ctrset_setdata data[]; 40 }; 41 42 struct s390_ctrset_read { /* Structure to get all ctr sets */ 43 __u64 no_cpus; /* Total # of CPUs data taken from */ 44 struct s390_ctrset_cpudata data[]; 45 }; 46 47 #define S390_HWCTR_MAGIC 'C' /* Random magic # for ioctls */ 48 #define S390_HWCTR_START _IOWR(S390_HWCTR_MAGIC, 1, struct s390_ctrset_start) 49 #define S390_HWCTR_STOP _IO(S390_HWCTR_MAGIC, 2) 50 #define S390_HWCTR_READ _IOWR(S390_HWCTR_MAGIC, 3, struct s390_ctrset_read) 51 #endif 52