162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright IBM Corp. 2021 462306a36Sopenharmony_ci * Interface implementation for communication with the CPU Measurement 562306a36Sopenharmony_ci * counter facility device driver. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Author(s): Thomas Richter <tmricht@linux.ibm.com> 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Define for ioctl() commands to communicate with the CPU Measurement 1062306a36Sopenharmony_ci * counter facility device driver. 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#ifndef _PERF_CPUM_CF_DIAG_H 1462306a36Sopenharmony_ci#define _PERF_CPUM_CF_DIAG_H 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <linux/ioctl.h> 1762306a36Sopenharmony_ci#include <linux/types.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define S390_HWCTR_DEVICE "hwctr" 2062306a36Sopenharmony_ci#define S390_HWCTR_START_VERSION 1 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct s390_ctrset_start { /* Set CPUs to operate on */ 2362306a36Sopenharmony_ci __u64 version; /* Version of interface */ 2462306a36Sopenharmony_ci __u64 data_bytes; /* # of bytes required */ 2562306a36Sopenharmony_ci __u64 cpumask_len; /* Length of CPU mask in bytes */ 2662306a36Sopenharmony_ci __u64 *cpumask; /* Pointer to CPU mask */ 2762306a36Sopenharmony_ci __u64 counter_sets; /* Bit mask of counter sets to get */ 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct s390_ctrset_setdata { /* Counter set data */ 3162306a36Sopenharmony_ci __u32 set; /* Counter set number */ 3262306a36Sopenharmony_ci __u32 no_cnts; /* # of counters stored in cv[] */ 3362306a36Sopenharmony_ci __u64 cv[]; /* Counter values (variable length) */ 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistruct s390_ctrset_cpudata { /* Counter set data per CPU */ 3762306a36Sopenharmony_ci __u32 cpu_nr; /* CPU number */ 3862306a36Sopenharmony_ci __u32 no_sets; /* # of counters sets in data[] */ 3962306a36Sopenharmony_ci struct s390_ctrset_setdata data[]; 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistruct s390_ctrset_read { /* Structure to get all ctr sets */ 4362306a36Sopenharmony_ci __u64 no_cpus; /* Total # of CPUs data taken from */ 4462306a36Sopenharmony_ci struct s390_ctrset_cpudata data[]; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define S390_HWCTR_MAGIC 'C' /* Random magic # for ioctls */ 4862306a36Sopenharmony_ci#define S390_HWCTR_START _IOWR(S390_HWCTR_MAGIC, 1, struct s390_ctrset_start) 4962306a36Sopenharmony_ci#define S390_HWCTR_STOP _IO(S390_HWCTR_MAGIC, 2) 5062306a36Sopenharmony_ci#define S390_HWCTR_READ _IOWR(S390_HWCTR_MAGIC, 3, struct s390_ctrset_read) 5162306a36Sopenharmony_ci#endif 52