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[0];			/* 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[0];
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[0];
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