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