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