Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
xen
interface
platform.h
Go to the documentation of this file.
1
/******************************************************************************
2
* platform.h
3
*
4
* Hardware platform operations. Intended for use by domain-0 kernel.
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the "Software"), to
8
* deal in the Software without restriction, including without limitation the
9
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
* sell copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
* DEALINGS IN THE SOFTWARE.
23
*
24
* Copyright (c) 2002-2006, K Fraser
25
*/
26
27
#ifndef __XEN_PUBLIC_PLATFORM_H__
28
#define __XEN_PUBLIC_PLATFORM_H__
29
30
#include <
xen/interface/xen.h
>
31
32
#define XENPF_INTERFACE_VERSION 0x03000001
33
34
/*
35
* Set clock such that it would read <secs,nsecs> after 00:00:00 UTC,
36
* 1 January, 1970 if the current system time was <system_time>.
37
*/
38
#define XENPF_settime 17
39
struct
xenpf_settime
{
40
/* IN variables. */
41
uint32_t
secs
;
42
uint32_t
nsecs
;
43
uint64_t
system_time
;
44
};
45
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_settime_t);
46
47
/*
48
* Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type.
49
* On x86, @type is an architecture-defined MTRR memory type.
50
* On success, returns the MTRR that was used (@reg) and a handle that can
51
* be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting.
52
* (x86-specific).
53
*/
54
#define XENPF_add_memtype 31
55
struct
xenpf_add_memtype
{
56
/* IN variables. */
57
xen_pfn_t
mfn
;
58
uint64_t
nr_mfns
;
59
uint32_t
type
;
60
/* OUT variables. */
61
uint32_t
handle
;
62
uint32_t
reg
;
63
};
64
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_add_memtype_t);
65
66
/*
67
* Tear down an existing memory-range type. If @handle is remembered then it
68
* should be passed in to accurately tear down the correct setting (in case
69
* of overlapping memory regions with differing types). If it is not known
70
* then @handle should be set to zero. In all cases @reg must be set.
71
* (x86-specific).
72
*/
73
#define XENPF_del_memtype 32
74
struct
xenpf_del_memtype
{
75
/* IN variables. */
76
uint32_t
handle
;
77
uint32_t
reg
;
78
};
79
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_del_memtype_t);
80
81
/* Read current type of an MTRR (x86-specific). */
82
#define XENPF_read_memtype 33
83
struct
xenpf_read_memtype
{
84
/* IN variables. */
85
uint32_t
reg
;
86
/* OUT variables. */
87
xen_pfn_t
mfn
;
88
uint64_t
nr_mfns
;
89
uint32_t
type
;
90
};
91
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_read_memtype_t);
92
93
#define XENPF_microcode_update 35
94
struct
xenpf_microcode_update
{
95
/* IN variables. */
96
GUEST_HANDLE
(
void
)
data
;
/* Pointer to microcode data */
97
uint32_t
length
;
/* Length of microcode data. */
98
};
99
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_microcode_update_t);
100
101
#define XENPF_platform_quirk 39
102
#define QUIRK_NOIRQBALANCING 1
/* Do not restrict IO-APIC RTE targets */
103
#define QUIRK_IOAPIC_BAD_REGSEL 2
/* IO-APIC REGSEL forgets its value */
104
#define QUIRK_IOAPIC_GOOD_REGSEL 3
/* IO-APIC REGSEL behaves properly */
105
struct
xenpf_platform_quirk
{
106
/* IN variables. */
107
uint32_t
quirk_id
;
108
};
109
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_platform_quirk_t);
110
111
#define XENPF_firmware_info 50
112
#define XEN_FW_DISK_INFO 1
/* from int 13 AH=08/41/48 */
113
#define XEN_FW_DISK_MBR_SIGNATURE 2
/* from MBR offset 0x1b8 */
114
#define XEN_FW_VBEDDC_INFO 3
/* from int 10 AX=4f15 */
115
#define XEN_FW_KBD_SHIFT_FLAGS 5
/* Int16, Fn02: Get keyboard shift flags. */
116
struct
xenpf_firmware_info
{
117
/* IN variables. */
118
uint32_t
type
;
119
uint32_t
index
;
120
/* OUT variables. */
121
union
{
122
struct
{
123
/* Int13, Fn48: Check Extensions Present. */
124
uint8_t
device
;
/* %dl: bios device number */
125
uint8_t
version
;
/* %ah: major version */
126
uint16_t
interface_support
;
/* %cx: support bitmap */
127
/* Int13, Fn08: Legacy Get Device Parameters. */
128
uint16_t
legacy_max_cylinder
;
/* %cl[7:6]:%ch: max cyl # */
129
uint8_t
legacy_max_head
;
/* %dh: max head # */
130
uint8_t
legacy_sectors_per_track
;
/* %cl[5:0]: max sector # */
131
/* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */
132
/* NB. First uint16_t of buffer must be set to buffer size. */
133
GUEST_HANDLE
(
void
) edd_params;
134
}
disk_info
;
/* XEN_FW_DISK_INFO */
135
struct
{
136
uint8_t
device
;
/* bios device number */
137
uint32_t
mbr_signature
;
/* offset 0x1b8 in mbr */
138
}
disk_mbr_signature
;
/* XEN_FW_DISK_MBR_SIGNATURE */
139
struct
{
140
/* Int10, AX=4F15: Get EDID info. */
141
uint8_t
capabilities
;
142
uint8_t
edid_transfer_time
;
143
/* must refer to 128-byte buffer */
144
GUEST_HANDLE
(
uchar
)
edid
;
145
}
vbeddc_info
;
/* XEN_FW_VBEDDC_INFO */
146
147
uint8_t
kbd_shift_flags
;
/* XEN_FW_KBD_SHIFT_FLAGS */
148
}
u
;
149
};
150
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_firmware_info_t);
151
152
#define XENPF_enter_acpi_sleep 51
153
struct
xenpf_enter_acpi_sleep
{
154
/* IN variables */
155
uint16_t
pm1a_cnt_val
;
/* PM1a control value. */
156
uint16_t
pm1b_cnt_val
;
/* PM1b control value. */
157
uint32_t
sleep_state
;
/* Which state to enter (Sn). */
158
uint32_t
flags
;
/* Must be zero. */
159
};
160
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_enter_acpi_sleep_t);
161
162
#define XENPF_change_freq 52
163
struct
xenpf_change_freq
{
164
/* IN variables */
165
uint32_t
flags
;
/* Must be zero. */
166
uint32_t
cpu
;
/* Physical cpu. */
167
uint64_t
freq
;
/* New frequency (Hz). */
168
};
169
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_change_freq_t);
170
171
/*
172
* Get idle times (nanoseconds since boot) for physical CPUs specified in the
173
* @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is
174
* indexed by CPU number; only entries with the corresponding @cpumap_bitmap
175
* bit set are written to. On return, @cpumap_bitmap is modified so that any
176
* non-existent CPUs are cleared. Such CPUs have their @idletime array entry
177
* cleared.
178
*/
179
#define XENPF_getidletime 53
180
struct
xenpf_getidletime
{
181
/* IN/OUT variables */
182
/* IN: CPUs to interrogate; OUT: subset of IN which are present */
183
GUEST_HANDLE
(
uchar
) cpumap_bitmap;
184
/* IN variables */
185
/* Size of cpumap bitmap. */
186
uint32_t
cpumap_nr_cpus
;
187
/* Must be indexable for every cpu in cpumap_bitmap. */
188
GUEST_HANDLE
(
uint64_t
) idletime;
189
/* OUT variables */
190
/* System time when the idletime snapshots were taken. */
191
uint64_t
now;
192
};
193
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_getidletime_t);
194
195
#define XENPF_set_processor_pminfo 54
196
197
/* ability bits */
198
#define XEN_PROCESSOR_PM_CX 1
199
#define XEN_PROCESSOR_PM_PX 2
200
#define XEN_PROCESSOR_PM_TX 4
201
202
/* cmd type */
203
#define XEN_PM_CX 0
204
#define XEN_PM_PX 1
205
#define XEN_PM_TX 2
206
#define XEN_PM_PDC 3
207
/* Px sub info type */
208
#define XEN_PX_PCT 1
209
#define XEN_PX_PSS 2
210
#define XEN_PX_PPC 4
211
#define XEN_PX_PSD 8
212
213
struct
xen_power_register
{
214
uint32_t
space_id
;
215
uint32_t
bit_width
;
216
uint32_t
bit_offset
;
217
uint32_t
access_size
;
218
uint64_t
address
;
219
};
220
221
struct
xen_processor_csd
{
222
uint32_t
domain
;
/* domain number of one dependent group */
223
uint32_t
coord_type
;
/* coordination type */
224
uint32_t
num
;
/* number of processors in same domain */
225
};
226
DEFINE_GUEST_HANDLE_STRUCT
(
xen_processor_csd
);
227
228
struct
xen_processor_cx
{
229
struct
xen_power_register
reg
;
/* GAS for Cx trigger register */
230
uint8_t
type
;
/* cstate value, c0: 0, c1: 1, ... */
231
uint32_t
latency
;
/* worst latency (ms) to enter/exit this cstate */
232
uint32_t
power
;
/* average power consumption(mW) */
233
uint32_t
dpcnt
;
/* number of dependency entries */
234
GUEST_HANDLE
(
xen_processor_csd
)
dp
;
/* NULL if no dependency */
235
};
236
DEFINE_GUEST_HANDLE_STRUCT
(
xen_processor_cx
);
237
238
struct
xen_processor_flags
{
239
uint32_t
bm_control:1;
240
uint32_t
bm_check:1;
241
uint32_t
has_cst:1;
242
uint32_t
power_setup_done:1;
243
uint32_t
bm_rld_set:1;
244
};
245
246
struct
xen_processor_power
{
247
uint32_t
count
;
/* number of C state entries in array below */
248
struct
xen_processor_flags
flags
;
/* global flags of this processor */
249
GUEST_HANDLE
(
xen_processor_cx
) states;
/* supported c states */
250
};
251
252
struct
xen_pct_register
{
253
uint8_t
descriptor
;
254
uint16_t
length
;
255
uint8_t
space_id
;
256
uint8_t
bit_width
;
257
uint8_t
bit_offset
;
258
uint8_t
reserved
;
259
uint64_t
address
;
260
};
261
262
struct
xen_processor_px
{
263
uint64_t
core_frequency
;
/* megahertz */
264
uint64_t
power
;
/* milliWatts */
265
uint64_t
transition_latency
;
/* microseconds */
266
uint64_t
bus_master_latency
;
/* microseconds */
267
uint64_t
control
;
/* control value */
268
uint64_t
status
;
/* success indicator */
269
};
270
DEFINE_GUEST_HANDLE_STRUCT
(
xen_processor_px
);
271
272
struct
xen_psd_package
{
273
uint64_t
num_entries
;
274
uint64_t
revision
;
275
uint64_t
domain
;
276
uint64_t
coord_type
;
277
uint64_t
num_processors
;
278
};
279
280
struct
xen_processor_performance
{
281
uint32_t
flags
;
/* flag for Px sub info type */
282
uint32_t
platform_limit
;
/* Platform limitation on freq usage */
283
struct
xen_pct_register
control_register;
284
struct
xen_pct_register
status_register;
285
uint32_t
state_count
;
/* total available performance states */
286
GUEST_HANDLE
(
xen_processor_px
) states;
287
struct
xen_psd_package
domain_info;
288
uint32_t
shared_type;
/* coordination type of this processor */
289
};
290
DEFINE_GUEST_HANDLE_STRUCT
(
xen_processor_performance
);
291
292
struct
xenpf_set_processor_pminfo
{
293
/* IN variables */
294
uint32_t
id
;
/* ACPI CPU ID */
295
uint32_t
type
;
/* {XEN_PM_CX, XEN_PM_PX} */
296
union
{
297
struct
xen_processor_power
power;
/* Cx: _CST/_CSD */
298
struct
xen_processor_performance perf;
/* Px: _PPC/_PCT/_PSS/_PSD */
299
GUEST_HANDLE
(
uint32_t
) pdc;
300
};
301
};
302
DEFINE_GUEST_HANDLE_STRUCT
(xenpf_set_processor_pminfo);
303
304
#define XENPF_get_cpuinfo 55
305
struct
xenpf_pcpuinfo
{
306
/* IN */
307
uint32_t
xen_cpuid
;
308
/* OUT */
309
/* The maxium cpu_id that is present */
310
uint32_t
max_present
;
311
#define XEN_PCPU_FLAGS_ONLINE 1
312
/* Correponding xen_cpuid is not present*/
313
#define XEN_PCPU_FLAGS_INVALID 2
314
uint32_t
flags
;
315
uint32_t
apic_id
;
316
uint32_t
acpi_id
;
317
};
318
DEFINE_GUEST_HANDLE_STRUCT
(
xenpf_pcpuinfo
);
319
320
#define XENPF_cpu_online 56
321
#define XENPF_cpu_offline 57
322
struct
xenpf_cpu_ol
{
323
uint32_t
cpuid
;
324
};
325
DEFINE_GUEST_HANDLE_STRUCT
(
xenpf_cpu_ol
);
326
327
struct
xen_platform_op
{
328
uint32_t
cmd
;
329
uint32_t
interface_version
;
/* XENPF_INTERFACE_VERSION */
330
union
{
331
struct
xenpf_settime
settime;
332
struct
xenpf_add_memtype
add_memtype;
333
struct
xenpf_del_memtype
del_memtype;
334
struct
xenpf_read_memtype
read_memtype;
335
struct
xenpf_microcode_update
microcode
;
336
struct
xenpf_platform_quirk
platform_quirk;
337
struct
xenpf_firmware_info
firmware_info
;
338
struct
xenpf_enter_acpi_sleep
enter_acpi_sleep;
339
struct
xenpf_change_freq
change_freq;
340
struct
xenpf_getidletime
getidletime;
341
struct
xenpf_set_processor_pminfo set_pminfo;
342
struct
xenpf_pcpuinfo
pcpu_info;
343
struct
xenpf_cpu_ol
cpu_ol;
344
uint8_t
pad
[128];
345
}
u
;
346
};
347
DEFINE_GUEST_HANDLE_STRUCT
(xen_platform_op_t);
348
349
#endif
/* __XEN_PUBLIC_PLATFORM_H__ */
Generated on Thu Jan 10 2013 12:58:53 for Linux Kernel by
1.8.2