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[0]; 71 }; 72 73 struct sysinfo_1_2_2_extension { 74 unsigned int alt_capability; 75 unsigned short alt_adjustment[0]; 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)147static 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[0]; 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