xref: /openbmc/linux/arch/s390/include/asm/sysinfo.h (revision bbecb07f)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * definition for store system information stsi
4  *
5  * Copyright IBM Corp. 2001, 2008
6  *
7  *    Author(s): Ulrich Weigand <weigand@de.ibm.com>
8  *		 Christian Borntraeger <borntraeger@de.ibm.com>
9  */
10 
11 #ifndef __ASM_S390_SYSINFO_H
12 #define __ASM_S390_SYSINFO_H
13 
14 #include <asm/bitsperlong.h>
15 #include <linux/uuid.h>
16 
17 struct sysinfo_1_1_1 {
18 	unsigned char p:1;
19 	unsigned char :6;
20 	unsigned char t:1;
21 	unsigned char :8;
22 	unsigned char ccr;
23 	unsigned char cai;
24 	char reserved_0[28];
25 	char manufacturer[16];
26 	char type[4];
27 	char reserved_1[12];
28 	char model_capacity[16];
29 	char sequence[16];
30 	char plant[4];
31 	char model[16];
32 	char model_perm_cap[16];
33 	char model_temp_cap[16];
34 	unsigned int model_cap_rating;
35 	unsigned int model_perm_cap_rating;
36 	unsigned int model_temp_cap_rating;
37 	unsigned char typepct[5];
38 	unsigned char reserved_2[3];
39 	unsigned int ncr;
40 	unsigned int npr;
41 	unsigned int ntr;
42 };
43 
44 struct sysinfo_1_2_1 {
45 	char reserved_0[80];
46 	char sequence[16];
47 	char plant[4];
48 	char reserved_1[2];
49 	unsigned short cpu_address;
50 };
51 
52 struct sysinfo_1_2_2 {
53 	char format;
54 	char reserved_0[1];
55 	unsigned short acc_offset;
56 	unsigned char mt_installed :1;
57 	unsigned char :2;
58 	unsigned char mt_stid :5;
59 	unsigned char :3;
60 	unsigned char mt_gtid :5;
61 	char reserved_1[18];
62 	unsigned int nominal_cap;
63 	unsigned int secondary_cap;
64 	unsigned int capability;
65 	unsigned short cpus_total;
66 	unsigned short cpus_configured;
67 	unsigned short cpus_standby;
68 	unsigned short cpus_reserved;
69 	unsigned short adjustment[0];
70 };
71 
72 struct sysinfo_1_2_2_extension {
73 	unsigned int alt_capability;
74 	unsigned short alt_adjustment[0];
75 };
76 
77 struct sysinfo_2_2_1 {
78 	char reserved_0[80];
79 	char sequence[16];
80 	char plant[4];
81 	unsigned short cpu_id;
82 	unsigned short cpu_address;
83 };
84 
85 struct sysinfo_2_2_2 {
86 	char reserved_0[32];
87 	unsigned short lpar_number;
88 	char reserved_1;
89 	unsigned char characteristics;
90 	unsigned short cpus_total;
91 	unsigned short cpus_configured;
92 	unsigned short cpus_standby;
93 	unsigned short cpus_reserved;
94 	char name[8];
95 	unsigned int caf;
96 	char reserved_2[8];
97 	unsigned char mt_installed :1;
98 	unsigned char :2;
99 	unsigned char mt_stid :5;
100 	unsigned char :3;
101 	unsigned char mt_gtid :5;
102 	unsigned char :3;
103 	unsigned char mt_psmtid :5;
104 	char reserved_3[5];
105 	unsigned short cpus_dedicated;
106 	unsigned short cpus_shared;
107 	char reserved_4[3];
108 	unsigned char vsne;
109 	uuid_t uuid;
110 	char reserved_5[160];
111 	char ext_name[256];
112 };
113 
114 #define LPAR_CHAR_DEDICATED	(1 << 7)
115 #define LPAR_CHAR_SHARED	(1 << 6)
116 #define LPAR_CHAR_LIMITED	(1 << 5)
117 
118 struct sysinfo_3_2_2 {
119 	char reserved_0[31];
120 	unsigned char :4;
121 	unsigned char count:4;
122 	struct {
123 		char reserved_0[4];
124 		unsigned short cpus_total;
125 		unsigned short cpus_configured;
126 		unsigned short cpus_standby;
127 		unsigned short cpus_reserved;
128 		char name[8];
129 		unsigned int caf;
130 		char cpi[16];
131 		char reserved_1[3];
132 		unsigned char evmne;
133 		unsigned int reserved_2;
134 		uuid_t uuid;
135 	} vm[8];
136 	char reserved_3[1504];
137 	char ext_names[8][256];
138 };
139 
140 extern int topology_max_mnest;
141 
142 /*
143  * Returns the maximum nesting level supported by the cpu topology code.
144  * The current maximum level is 4 which is the drawer level.
145  */
146 static inline unsigned char topology_mnest_limit(void)
147 {
148 	return min(topology_max_mnest, 4);
149 }
150 
151 #define TOPOLOGY_NR_MAG		6
152 
153 struct topology_core {
154 	unsigned char nl;
155 	unsigned char reserved0[3];
156 	unsigned char :5;
157 	unsigned char d:1;
158 	unsigned char pp:2;
159 	unsigned char reserved1;
160 	unsigned short origin;
161 	unsigned long mask;
162 };
163 
164 struct topology_container {
165 	unsigned char nl;
166 	unsigned char reserved[6];
167 	unsigned char id;
168 };
169 
170 union topology_entry {
171 	unsigned char nl;
172 	struct topology_core cpu;
173 	struct topology_container container;
174 };
175 
176 struct sysinfo_15_1_x {
177 	unsigned char reserved0[2];
178 	unsigned short length;
179 	unsigned char mag[TOPOLOGY_NR_MAG];
180 	unsigned char reserved1;
181 	unsigned char mnest;
182 	unsigned char reserved2[4];
183 	union topology_entry tle[0];
184 };
185 
186 int stsi(void *sysinfo, int fc, int sel1, int sel2);
187 
188 /*
189  * Service level reporting interface.
190  */
191 struct service_level {
192 	struct list_head list;
193 	void (*seq_print)(struct seq_file *, struct service_level *);
194 };
195 
196 int register_service_level(struct service_level *);
197 int unregister_service_level(struct service_level *);
198 
199 int sthyi_fill(void *dst, u64 *rc);
200 #endif /* __ASM_S390_SYSINFO_H */
201