linux/arch/s390/include/asm/sysinfo.h
<<
>>
Prefs
   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
  19struct sysinfo_1_1_1 {
  20        unsigned short :16;
  21        unsigned char ccr;
  22        unsigned char cai;
  23        char reserved_0[28];
  24        char manufacturer[16];
  25        char type[4];
  26        char reserved_1[12];
  27        char model_capacity[16];
  28        char sequence[16];
  29        char plant[4];
  30        char model[16];
  31        char model_perm_cap[16];
  32        char model_temp_cap[16];
  33        char model_cap_rating[4];
  34        char model_perm_cap_rating[4];
  35        char model_temp_cap_rating[4];
  36};
  37
  38struct sysinfo_1_2_1 {
  39        char reserved_0[80];
  40        char sequence[16];
  41        char plant[4];
  42        char reserved_1[2];
  43        unsigned short cpu_address;
  44};
  45
  46struct sysinfo_1_2_2 {
  47        char format;
  48        char reserved_0[1];
  49        unsigned short acc_offset;
  50        char reserved_1[24];
  51        unsigned int secondary_capability;
  52        unsigned int capability;
  53        unsigned short cpus_total;
  54        unsigned short cpus_configured;
  55        unsigned short cpus_standby;
  56        unsigned short cpus_reserved;
  57        unsigned short adjustment[0];
  58};
  59
  60struct sysinfo_1_2_2_extension {
  61        unsigned int alt_capability;
  62        unsigned short alt_adjustment[0];
  63};
  64
  65struct sysinfo_2_2_1 {
  66        char reserved_0[80];
  67        char sequence[16];
  68        char plant[4];
  69        unsigned short cpu_id;
  70        unsigned short cpu_address;
  71};
  72
  73struct sysinfo_2_2_2 {
  74        char reserved_0[32];
  75        unsigned short lpar_number;
  76        char reserved_1;
  77        unsigned char characteristics;
  78        unsigned short cpus_total;
  79        unsigned short cpus_configured;
  80        unsigned short cpus_standby;
  81        unsigned short cpus_reserved;
  82        char name[8];
  83        unsigned int caf;
  84        char reserved_2[16];
  85        unsigned short cpus_dedicated;
  86        unsigned short cpus_shared;
  87};
  88
  89#define LPAR_CHAR_DEDICATED     (1 << 7)
  90#define LPAR_CHAR_SHARED        (1 << 6)
  91#define LPAR_CHAR_LIMITED       (1 << 5)
  92
  93struct sysinfo_3_2_2 {
  94        char reserved_0[31];
  95        unsigned char :4;
  96        unsigned char count:4;
  97        struct {
  98                char reserved_0[4];
  99                unsigned short cpus_total;
 100                unsigned short cpus_configured;
 101                unsigned short cpus_standby;
 102                unsigned short cpus_reserved;
 103                char name[8];
 104                unsigned int caf;
 105                char cpi[16];
 106                char reserved_1[24];
 107
 108        } vm[8];
 109        char reserved_544[3552];
 110};
 111
 112#define TOPOLOGY_CPU_BITS       64
 113#define TOPOLOGY_NR_MAG         6
 114
 115struct topology_cpu {
 116        unsigned char reserved0[4];
 117        unsigned char :6;
 118        unsigned char pp:2;
 119        unsigned char reserved1;
 120        unsigned short origin;
 121        unsigned long mask[TOPOLOGY_CPU_BITS / BITS_PER_LONG];
 122};
 123
 124struct topology_container {
 125        unsigned char reserved[7];
 126        unsigned char id;
 127};
 128
 129union topology_entry {
 130        unsigned char nl;
 131        struct topology_cpu cpu;
 132        struct topology_container container;
 133};
 134
 135struct sysinfo_15_1_x {
 136        unsigned char reserved0[2];
 137        unsigned short length;
 138        unsigned char mag[TOPOLOGY_NR_MAG];
 139        unsigned char reserved1;
 140        unsigned char mnest;
 141        unsigned char reserved2[4];
 142        union topology_entry tle[0];
 143};
 144
 145static inline int stsi(void *sysinfo, int fc, int sel1, int sel2)
 146{
 147        register int r0 asm("0") = (fc << 28) | sel1;
 148        register int r1 asm("1") = sel2;
 149
 150        asm volatile(
 151                "   stsi 0(%2)\n"
 152                "0: jz   2f\n"
 153                "1: lhi  %0,%3\n"
 154                "2:\n"
 155                EX_TABLE(0b, 1b)
 156                : "+d" (r0) : "d" (r1), "a" (sysinfo), "K" (-ENOSYS)
 157                : "cc", "memory");
 158        return r0;
 159}
 160
 161/*
 162 * Service level reporting interface.
 163 */
 164struct service_level {
 165        struct list_head list;
 166        void (*seq_print)(struct seq_file *, struct service_level *);
 167};
 168
 169int register_service_level(struct service_level *);
 170int unregister_service_level(struct service_level *);
 171
 172#endif /* __ASM_S390_SYSINFO_H */
 173