blob: 014f2a24664e49e1cd01a4a44771a653e8a05ccc [file] [log] [blame]
Christian Borntraegeraa24f7f2008-04-17 07:46:09 +02001/*
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
14struct sysinfo_1_1_1 {
15 char reserved_0[32];
16 char manufacturer[16];
17 char type[4];
18 char reserved_1[12];
19 char model_capacity[16];
20 char sequence[16];
21 char plant[4];
22 char model[16];
23};
24
25struct sysinfo_1_2_1 {
26 char reserved_0[80];
27 char sequence[16];
28 char plant[4];
29 char reserved_1[2];
30 unsigned short cpu_address;
31};
32
33struct sysinfo_1_2_2 {
34 char format;
35 char reserved_0[1];
36 unsigned short acc_offset;
37 char reserved_1[24];
38 unsigned int secondary_capability;
39 unsigned int capability;
40 unsigned short cpus_total;
41 unsigned short cpus_configured;
42 unsigned short cpus_standby;
43 unsigned short cpus_reserved;
44 unsigned short adjustment[0];
45};
46
47struct sysinfo_1_2_2_extension {
48 unsigned int alt_capability;
49 unsigned short alt_adjustment[0];
50};
51
52struct sysinfo_2_2_1 {
53 char reserved_0[80];
54 char sequence[16];
55 char plant[4];
56 unsigned short cpu_id;
57 unsigned short cpu_address;
58};
59
60struct sysinfo_2_2_2 {
61 char reserved_0[32];
62 unsigned short lpar_number;
63 char reserved_1;
64 unsigned char characteristics;
65 unsigned short cpus_total;
66 unsigned short cpus_configured;
67 unsigned short cpus_standby;
68 unsigned short cpus_reserved;
69 char name[8];
70 unsigned int caf;
71 char reserved_2[16];
72 unsigned short cpus_dedicated;
73 unsigned short cpus_shared;
74};
75
76#define LPAR_CHAR_DEDICATED (1 << 7)
77#define LPAR_CHAR_SHARED (1 << 6)
78#define LPAR_CHAR_LIMITED (1 << 5)
79
80struct sysinfo_3_2_2 {
81 char reserved_0[31];
82 unsigned char count;
83 struct {
84 char reserved_0[4];
85 unsigned short cpus_total;
86 unsigned short cpus_configured;
87 unsigned short cpus_standby;
88 unsigned short cpus_reserved;
89 char name[8];
90 unsigned int caf;
91 char cpi[16];
92 char reserved_1[24];
93
94 } vm[8];
95};
96
97static inline int stsi(void *sysinfo, int fc, int sel1, int sel2)
98{
99 register int r0 asm("0") = (fc << 28) | sel1;
100 register int r1 asm("1") = sel2;
101
102 asm volatile(
103 " stsi 0(%2)\n"
104 "0: jz 2f\n"
105 "1: lhi %0,%3\n"
106 "2:\n"
107 EX_TABLE(0b, 1b)
108 : "+d" (r0) : "d" (r1), "a" (sysinfo), "K" (-ENOSYS)
109 : "cc", "memory");
110 return r0;
111}