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