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