root/arch/s390/include/uapi/asm/hwctrset.h
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
 * Copyright IBM Corp. 2021
 * Interface implementation for communication with the CPU Measurement
 * counter facility device driver.
 *
 * Author(s): Thomas Richter <tmricht@linux.ibm.com>
 *
 * Define for ioctl() commands to communicate with the CPU Measurement
 * counter facility device driver.
 */

#ifndef _PERF_CPUM_CF_DIAG_H
#define _PERF_CPUM_CF_DIAG_H

#include <linux/ioctl.h>
#include <linux/types.h>

#define S390_HWCTR_DEVICE               "hwctr"
#define S390_HWCTR_START_VERSION        1

struct s390_ctrset_start {              /* Set CPUs to operate on */
        __u64 version;                  /* Version of interface */
        __u64 data_bytes;               /* # of bytes required */
        __u64 cpumask_len;              /* Length of CPU mask in bytes */
        __u64 *cpumask;                 /* Pointer to CPU mask */
        __u64 counter_sets;             /* Bit mask of counter sets to get */
};

struct s390_ctrset_setdata {            /* Counter set data */
        __u32 set;                      /* Counter set number */
        __u32 no_cnts;                  /* # of counters stored in cv[] */
        __u64 cv[];                     /* Counter values (variable length) */
};

struct s390_ctrset_cpudata {            /* Counter set data per CPU */
        __u32 cpu_nr;                   /* CPU number */
        __u32 no_sets;                  /* # of counters sets in data[] */
        struct s390_ctrset_setdata data[];
};

struct s390_ctrset_read {               /* Structure to get all ctr sets */
        __u64 no_cpus;                  /* Total # of CPUs data taken from */
        struct s390_ctrset_cpudata data[];
};

#define S390_HWCTR_MAGIC        'C'     /* Random magic # for ioctls */
#define S390_HWCTR_START        _IOWR(S390_HWCTR_MAGIC, 1, struct s390_ctrset_start)
#define S390_HWCTR_STOP         _IO(S390_HWCTR_MAGIC, 2)
#define S390_HWCTR_READ         _IOWR(S390_HWCTR_MAGIC, 3, struct s390_ctrset_read)
#endif