^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Auxtrace support for s390 CPU measurement sampling facility
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright IBM Corp. 2018
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Author(s): Hendrik Brueckner <brueckner@linux.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Thomas Richter <tmricht@linux.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #ifndef S390_CPUMSF_KERNEL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define S390_CPUMSF_KERNEL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define S390_CPUMSF_PAGESZ 4096 /* Size of sample block units */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define S390_CPUMSF_DIAG_DEF_FIRST 0x8001 /* Diagnostic entry lowest id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) struct hws_basic_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) unsigned int def:16; /* 0-15 Data Entry Format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) unsigned int R:4; /* 16-19 reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) unsigned int U:4; /* 20-23 Number of unique instruct. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) unsigned int z:2; /* zeros */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) unsigned int T:1; /* 26 PSW DAT mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) unsigned int W:1; /* 27 PSW wait state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unsigned int P:1; /* 28 PSW Problem state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) unsigned int AS:2; /* 29-30 PSW address-space control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) unsigned int I:1; /* 31 entry valid or invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) unsigned int CL:2; /* 32-33 Configuration Level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) unsigned int:14;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) unsigned int prim_asn:16; /* primary ASN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) unsigned long long ia; /* Instruction Address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) unsigned long long gpp; /* Guest Program Parameter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) unsigned long long hpp; /* Host Program Parameter */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct hws_diag_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) unsigned int def:16; /* 0-15 Data Entry Format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) unsigned int R:15; /* 16-19 and 20-30 reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) unsigned int I:1; /* 31 entry valid or invalid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) u8 data[]; /* Machine-dependent sample data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct hws_combined_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) struct hws_basic_entry basic; /* Basic-sampling data entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct hws_diag_entry diag; /* Diagnostic-sampling data entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) struct hws_trailer_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) unsigned int f:1; /* 0 - Block Full Indicator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) unsigned int a:1; /* 1 - Alert request control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) unsigned int t:1; /* 2 - Timestamp format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) unsigned int:29; /* 3 - 31: Reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) unsigned int bsdes:16; /* 32-47: size of basic SDE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) unsigned int dsdes:16; /* 48-63: size of diagnostic SDE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) unsigned long long flags; /* 0 - 64: All indicators */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) unsigned long long overflow; /* 64 - sample Overflow count */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) unsigned char timestamp[16]; /* 16 - 31 timestamp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) unsigned long long reserved1; /* 32 -Reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) unsigned long long reserved2; /* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) union { /* 48 - reserved for programming use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) unsigned long long clock_base:1; /* in progusage2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) unsigned long long progusage1:63;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) unsigned long long progusage2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) unsigned long long progusage[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #endif