File Index
Files and directories
Sign in
FILE

sysinfo.h

File preview with syntax highlighting.

linux-6.19.14/arch/s390/include/asm/sysinfo.h C
  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 <linux/uuid.h>
 15#include <asm/bitsperlong.h>
 16#include <asm/asm.h>
 17
 18/*
 19 * stsi - store system information
 20 *
 21 * Returns the current configuration level if function code 0 was specified.
 22 * Otherwise returns 0 on success or a negative value on error.
 23 */
 24static inline int stsi(void *sysinfo, int fc, int sel1, int sel2)
 25{
 26	int r0 = (fc << 28) | sel1;
 27	int cc;
 28
 29	asm volatile(
 30		"	lr	%%r0,%[r0]\n"
 31		"	lr	%%r1,%[r1]\n"
 32		"	stsi	%[sysinfo]\n"
 33		"	lr	%[r0],%%r0\n"
 34		CC_IPM(cc)
 35		: CC_OUT(cc, cc), [r0] "+d" (r0), [sysinfo] "=Q" (*(char *)sysinfo)
 36		: [r1] "d" (sel2)
 37		: CC_CLOBBER_LIST("0", "1", "memory"));
 38	if (cc == 3)
 39		return -EOPNOTSUPP;
 40	return fc ? 0 : (unsigned int)r0 >> 28;
 41}
 42
 43struct sysinfo_1_1_1 {
 44	unsigned char p:1;
 45	unsigned char :6;
 46	unsigned char t:1;
 47	unsigned char :8;
 48	unsigned char ccr;
 49	unsigned char cai;
 50	char reserved_0[20];
 51	unsigned long lic;
 52	char manufacturer[16];
 53	char type[4];
 54	char reserved_1[12];
 55	char model_capacity[16];
 56	char sequence[16];
 57	char plant[4];
 58	char model[16];
 59	char model_perm_cap[16];
 60	char model_temp_cap[16];
 61	unsigned int model_cap_rating;
 62	unsigned int model_perm_cap_rating;
 63	unsigned int model_temp_cap_rating;
 64	unsigned char typepct[5];
 65	unsigned char reserved_2[3];
 66	unsigned int ncr;
 67	unsigned int npr;
 68	unsigned int ntr;
 69	char reserved_3[4];
 70	char model_var_cap[16];
 71	unsigned int model_var_cap_rating;
 72	unsigned int nvr;
 73};
 74
 75struct sysinfo_1_2_1 {
 76	char reserved_0[80];
 77	char sequence[16];
 78	char plant[4];
 79	char reserved_1[2];
 80	unsigned short cpu_address;
 81};
 82
 83struct sysinfo_1_2_2 {
 84	char format;
 85	char reserved_0[1];
 86	unsigned short acc_offset;
 87	unsigned char mt_installed :1;
 88	unsigned char :2;
 89	unsigned char mt_stid :5;
 90	unsigned char :3;
 91	unsigned char mt_gtid :5;
 92	char reserved_1[18];
 93	unsigned int nominal_cap;
 94	unsigned int secondary_cap;
 95	unsigned int capability;
 96	unsigned short cpus_total;
 97	unsigned short cpus_configured;
 98	unsigned short cpus_standby;
 99	unsigned short cpus_reserved;
100	unsigned short adjustment[];
101};
102
103struct sysinfo_1_2_2_extension {
104	unsigned int alt_capability;
105	unsigned short alt_adjustment[];
106};
107
108struct sysinfo_2_2_1 {
109	char reserved_0[80];
110	char sequence[16];
111	char plant[4];
112	unsigned short cpu_id;
113	unsigned short cpu_address;
114};
115
116struct sysinfo_2_2_2 {
117	char reserved_0[32];
118	unsigned short lpar_number;
119	char reserved_1;
120	unsigned char characteristics;
121	unsigned short cpus_total;
122	unsigned short cpus_configured;
123	unsigned short cpus_standby;
124	unsigned short cpus_reserved;
125	char name[8];
126	unsigned int caf;
127	char reserved_2[8];
128	unsigned char mt_installed :1;
129	unsigned char :2;
130	unsigned char mt_stid :5;
131	unsigned char :3;
132	unsigned char mt_gtid :5;
133	unsigned char :3;
134	unsigned char mt_psmtid :5;
135	char reserved_3[5];
136	unsigned short cpus_dedicated;
137	unsigned short cpus_shared;
138	char reserved_4[3];
139	unsigned char vsne;
140	uuid_t uuid;
141	char reserved_5[160];
142	char ext_name[256];
143};
144
145#define LPAR_CHAR_DEDICATED	(1 << 7)
146#define LPAR_CHAR_SHARED	(1 << 6)
147#define LPAR_CHAR_LIMITED	(1 << 5)
148
149struct sysinfo_3_2_2 {
150	char reserved_0[31];
151	unsigned char :4;
152	unsigned char count:4;
153	struct {
154		char reserved_0[4];
155		unsigned short cpus_total;
156		unsigned short cpus_configured;
157		unsigned short cpus_standby;
158		unsigned short cpus_reserved;
159		char name[8];
160		unsigned int caf;
161		char cpi[16];
162		char reserved_1[3];
163		unsigned char evmne;
164		unsigned int reserved_2;
165		uuid_t uuid;
166	} vm[8];
167	char reserved_3[1504];
168	char ext_names[8][256];
169};
170
171extern int topology_max_mnest;
172
173/*
174 * Returns the maximum nesting level supported by the cpu topology code.
175 * The current maximum level is 4 which is the drawer level.
176 */
177static inline unsigned char topology_mnest_limit(void)
178{
179	return min(topology_max_mnest, 4);
180}
181
182#define TOPOLOGY_NR_MAG		6
183
184struct topology_core {
185	unsigned char nl;
186	unsigned char reserved0[3];
187	unsigned char :5;
188	unsigned char d:1;
189	unsigned char pp:2;
190	unsigned char reserved1;
191	unsigned short origin;
192	unsigned long mask;
193};
194
195struct topology_container {
196	unsigned char nl;
197	unsigned char reserved[6];
198	unsigned char id;
199};
200
201union topology_entry {
202	unsigned char nl;
203	struct topology_core cpu;
204	struct topology_container container;
205};
206
207struct sysinfo_15_1_x {
208	unsigned char reserved0[2];
209	unsigned short length;
210	unsigned char mag[TOPOLOGY_NR_MAG];
211	unsigned char reserved1;
212	unsigned char mnest;
213	unsigned char reserved2[4];
214	union topology_entry tle[];
215};
216
217int stsi(void *sysinfo, int fc, int sel1, int sel2);
218
219/*
220 * Service level reporting interface.
221 */
222struct service_level {
223	struct list_head list;
224	void (*seq_print)(struct seq_file *, struct service_level *);
225};
226
227int register_service_level(struct service_level *);
228int unregister_service_level(struct service_level *);
229
230int sthyi_fill(void *dst, u64 *rc);
231#endif /* __ASM_S390_SYSINFO_H */
~/ Read-only file preview.