0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __ASM_S390_SYSINFO_H
0012 #define __ASM_S390_SYSINFO_H
0013
0014 #include <asm/bitsperlong.h>
0015 #include <linux/uuid.h>
0016
0017 struct sysinfo_1_1_1 {
0018 unsigned char p:1;
0019 unsigned char :6;
0020 unsigned char t:1;
0021 unsigned char :8;
0022 unsigned char ccr;
0023 unsigned char cai;
0024 char reserved_0[20];
0025 unsigned long lic;
0026 char manufacturer[16];
0027 char type[4];
0028 char reserved_1[12];
0029 char model_capacity[16];
0030 char sequence[16];
0031 char plant[4];
0032 char model[16];
0033 char model_perm_cap[16];
0034 char model_temp_cap[16];
0035 unsigned int model_cap_rating;
0036 unsigned int model_perm_cap_rating;
0037 unsigned int model_temp_cap_rating;
0038 unsigned char typepct[5];
0039 unsigned char reserved_2[3];
0040 unsigned int ncr;
0041 unsigned int npr;
0042 unsigned int ntr;
0043 };
0044
0045 struct sysinfo_1_2_1 {
0046 char reserved_0[80];
0047 char sequence[16];
0048 char plant[4];
0049 char reserved_1[2];
0050 unsigned short cpu_address;
0051 };
0052
0053 struct sysinfo_1_2_2 {
0054 char format;
0055 char reserved_0[1];
0056 unsigned short acc_offset;
0057 unsigned char mt_installed :1;
0058 unsigned char :2;
0059 unsigned char mt_stid :5;
0060 unsigned char :3;
0061 unsigned char mt_gtid :5;
0062 char reserved_1[18];
0063 unsigned int nominal_cap;
0064 unsigned int secondary_cap;
0065 unsigned int capability;
0066 unsigned short cpus_total;
0067 unsigned short cpus_configured;
0068 unsigned short cpus_standby;
0069 unsigned short cpus_reserved;
0070 unsigned short adjustment[];
0071 };
0072
0073 struct sysinfo_1_2_2_extension {
0074 unsigned int alt_capability;
0075 unsigned short alt_adjustment[];
0076 };
0077
0078 struct sysinfo_2_2_1 {
0079 char reserved_0[80];
0080 char sequence[16];
0081 char plant[4];
0082 unsigned short cpu_id;
0083 unsigned short cpu_address;
0084 };
0085
0086 struct sysinfo_2_2_2 {
0087 char reserved_0[32];
0088 unsigned short lpar_number;
0089 char reserved_1;
0090 unsigned char characteristics;
0091 unsigned short cpus_total;
0092 unsigned short cpus_configured;
0093 unsigned short cpus_standby;
0094 unsigned short cpus_reserved;
0095 char name[8];
0096 unsigned int caf;
0097 char reserved_2[8];
0098 unsigned char mt_installed :1;
0099 unsigned char :2;
0100 unsigned char mt_stid :5;
0101 unsigned char :3;
0102 unsigned char mt_gtid :5;
0103 unsigned char :3;
0104 unsigned char mt_psmtid :5;
0105 char reserved_3[5];
0106 unsigned short cpus_dedicated;
0107 unsigned short cpus_shared;
0108 char reserved_4[3];
0109 unsigned char vsne;
0110 uuid_t uuid;
0111 char reserved_5[160];
0112 char ext_name[256];
0113 };
0114
0115 #define LPAR_CHAR_DEDICATED (1 << 7)
0116 #define LPAR_CHAR_SHARED (1 << 6)
0117 #define LPAR_CHAR_LIMITED (1 << 5)
0118
0119 struct sysinfo_3_2_2 {
0120 char reserved_0[31];
0121 unsigned char :4;
0122 unsigned char count:4;
0123 struct {
0124 char reserved_0[4];
0125 unsigned short cpus_total;
0126 unsigned short cpus_configured;
0127 unsigned short cpus_standby;
0128 unsigned short cpus_reserved;
0129 char name[8];
0130 unsigned int caf;
0131 char cpi[16];
0132 char reserved_1[3];
0133 unsigned char evmne;
0134 unsigned int reserved_2;
0135 uuid_t uuid;
0136 } vm[8];
0137 char reserved_3[1504];
0138 char ext_names[8][256];
0139 };
0140
0141 extern int topology_max_mnest;
0142
0143
0144
0145
0146
0147 static inline unsigned char topology_mnest_limit(void)
0148 {
0149 return min(topology_max_mnest, 4);
0150 }
0151
0152 #define TOPOLOGY_NR_MAG 6
0153
0154 struct topology_core {
0155 unsigned char nl;
0156 unsigned char reserved0[3];
0157 unsigned char :5;
0158 unsigned char d:1;
0159 unsigned char pp:2;
0160 unsigned char reserved1;
0161 unsigned short origin;
0162 unsigned long mask;
0163 };
0164
0165 struct topology_container {
0166 unsigned char nl;
0167 unsigned char reserved[6];
0168 unsigned char id;
0169 };
0170
0171 union topology_entry {
0172 unsigned char nl;
0173 struct topology_core cpu;
0174 struct topology_container container;
0175 };
0176
0177 struct sysinfo_15_1_x {
0178 unsigned char reserved0[2];
0179 unsigned short length;
0180 unsigned char mag[TOPOLOGY_NR_MAG];
0181 unsigned char reserved1;
0182 unsigned char mnest;
0183 unsigned char reserved2[4];
0184 union topology_entry tle[];
0185 };
0186
0187 int stsi(void *sysinfo, int fc, int sel1, int sel2);
0188
0189
0190
0191
0192 struct service_level {
0193 struct list_head list;
0194 void (*seq_print)(struct seq_file *, struct service_level *);
0195 };
0196
0197 int register_service_level(struct service_level *);
0198 int unregister_service_level(struct service_level *);
0199
0200 int sthyi_fill(void *dst, u64 *rc);
0201 #endif