1 /* 2 * definition for store system information stsi 3 * 4 * Copyright IBM Corp. 2001, 2008 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License (version 2 only) 8 * as published by the Free Software Foundation. 9 * 10 * Author(s): Ulrich Weigand <weigand@de.ibm.com> 11 * Christian Borntraeger <borntraeger@de.ibm.com> 12 */ 13 14 #ifndef __ASM_S390_SYSINFO_H 15 #define __ASM_S390_SYSINFO_H 16 17 #include <asm/bitsperlong.h> 18 #include <linux/uuid.h> 19 20 struct sysinfo_1_1_1 { 21 unsigned char p:1; 22 unsigned char :6; 23 unsigned char t:1; 24 unsigned char :8; 25 unsigned char ccr; 26 unsigned char cai; 27 char reserved_0[28]; 28 char manufacturer[16]; 29 char type[4]; 30 char reserved_1[12]; 31 char model_capacity[16]; 32 char sequence[16]; 33 char plant[4]; 34 char model[16]; 35 char model_perm_cap[16]; 36 char model_temp_cap[16]; 37 unsigned int model_cap_rating; 38 unsigned int model_perm_cap_rating; 39 unsigned int model_temp_cap_rating; 40 unsigned char typepct[5]; 41 unsigned char reserved_2[3]; 42 unsigned int ncr; 43 unsigned int npr; 44 unsigned int ntr; 45 }; 46 47 struct sysinfo_1_2_1 { 48 char reserved_0[80]; 49 char sequence[16]; 50 char plant[4]; 51 char reserved_1[2]; 52 unsigned short cpu_address; 53 }; 54 55 struct sysinfo_1_2_2 { 56 char format; 57 char reserved_0[1]; 58 unsigned short acc_offset; 59 unsigned char mt_installed :1; 60 unsigned char :2; 61 unsigned char mt_stid :5; 62 unsigned char :3; 63 unsigned char mt_gtid :5; 64 char reserved_1[18]; 65 unsigned int nominal_cap; 66 unsigned int secondary_cap; 67 unsigned int capability; 68 unsigned short cpus_total; 69 unsigned short cpus_configured; 70 unsigned short cpus_standby; 71 unsigned short cpus_reserved; 72 unsigned short adjustment[0]; 73 }; 74 75 struct sysinfo_1_2_2_extension { 76 unsigned int alt_capability; 77 unsigned short alt_adjustment[0]; 78 }; 79 80 struct sysinfo_2_2_1 { 81 char reserved_0[80]; 82 char sequence[16]; 83 char plant[4]; 84 unsigned short cpu_id; 85 unsigned short cpu_address; 86 }; 87 88 struct sysinfo_2_2_2 { 89 char reserved_0[32]; 90 unsigned short lpar_number; 91 char reserved_1; 92 unsigned char characteristics; 93 unsigned short cpus_total; 94 unsigned short cpus_configured; 95 unsigned short cpus_standby; 96 unsigned short cpus_reserved; 97 char name[8]; 98 unsigned int caf; 99 char reserved_2[8]; 100 unsigned char mt_installed :1; 101 unsigned char :2; 102 unsigned char mt_stid :5; 103 unsigned char :3; 104 unsigned char mt_gtid :5; 105 unsigned char :3; 106 unsigned char mt_psmtid :5; 107 char reserved_3[5]; 108 unsigned short cpus_dedicated; 109 unsigned short cpus_shared; 110 char reserved_4[3]; 111 unsigned char vsne; 112 uuid_be uuid; 113 char reserved_5[160]; 114 char ext_name[256]; 115 }; 116 117 #define LPAR_CHAR_DEDICATED (1 << 7) 118 #define LPAR_CHAR_SHARED (1 << 6) 119 #define LPAR_CHAR_LIMITED (1 << 5) 120 121 struct sysinfo_3_2_2 { 122 char reserved_0[31]; 123 unsigned char :4; 124 unsigned char count:4; 125 struct { 126 char reserved_0[4]; 127 unsigned short cpus_total; 128 unsigned short cpus_configured; 129 unsigned short cpus_standby; 130 unsigned short cpus_reserved; 131 char name[8]; 132 unsigned int caf; 133 char cpi[16]; 134 char reserved_1[3]; 135 unsigned char evmne; 136 unsigned int reserved_2; 137 uuid_be uuid; 138 } vm[8]; 139 char reserved_3[1504]; 140 char ext_names[8][256]; 141 }; 142 143 extern int topology_max_mnest; 144 145 /* 146 * Returns the maximum nesting level supported by the cpu topology code. 147 * The current maximum level is 4 which is the drawer level. 148 */ 149 static inline unsigned char topology_mnest_limit(void) 150 { 151 return min(topology_max_mnest, 4); 152 } 153 154 #define TOPOLOGY_NR_MAG 6 155 156 struct topology_core { 157 unsigned char nl; 158 unsigned char reserved0[3]; 159 unsigned char :6; 160 unsigned char pp:2; 161 unsigned char reserved1; 162 unsigned short origin; 163 unsigned long mask; 164 }; 165 166 struct topology_container { 167 unsigned char nl; 168 unsigned char reserved[6]; 169 unsigned char id; 170 }; 171 172 union topology_entry { 173 unsigned char nl; 174 struct topology_core cpu; 175 struct topology_container container; 176 }; 177 178 struct sysinfo_15_1_x { 179 unsigned char reserved0[2]; 180 unsigned short length; 181 unsigned char mag[TOPOLOGY_NR_MAG]; 182 unsigned char reserved1; 183 unsigned char mnest; 184 unsigned char reserved2[4]; 185 union topology_entry tle[0]; 186 }; 187 188 int stsi(void *sysinfo, int fc, int sel1, int sel2); 189 190 /* 191 * Service level reporting interface. 192 */ 193 struct service_level { 194 struct list_head list; 195 void (*seq_print)(struct seq_file *, struct service_level *); 196 }; 197 198 int register_service_level(struct service_level *); 199 int unregister_service_level(struct service_level *); 200 201 #endif /* __ASM_S390_SYSINFO_H */ 202