Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * definition for store system information stsi
0004  *
0005  * Copyright IBM Corp. 2001, 2008
0006  *
0007  *    Author(s): Ulrich Weigand <weigand@de.ibm.com>
0008  *       Christian Borntraeger <borntraeger@de.ibm.com>
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  * Returns the maximum nesting level supported by the cpu topology code.
0145  * The current maximum level is 4 which is the drawer level.
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  * Service level reporting interface.
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 /* __ASM_S390_SYSINFO_H */