1843e1988Sjohnlev /******************************************************************************
2843e1988Sjohnlev  * platform.h
3843e1988Sjohnlev  *
4843e1988Sjohnlev  * Hardware platform operations. Intended for use by domain-0 kernel.
5843e1988Sjohnlev  *
6843e1988Sjohnlev  * Permission is hereby granted, free of charge, to any person obtaining a copy
7843e1988Sjohnlev  * of this software and associated documentation files (the "Software"), to
8843e1988Sjohnlev  * deal in the Software without restriction, including without limitation the
9843e1988Sjohnlev  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10843e1988Sjohnlev  * sell copies of the Software, and to permit persons to whom the Software is
11843e1988Sjohnlev  * furnished to do so, subject to the following conditions:
12843e1988Sjohnlev  *
13843e1988Sjohnlev  * The above copyright notice and this permission notice shall be included in
14843e1988Sjohnlev  * all copies or substantial portions of the Software.
15843e1988Sjohnlev  *
16843e1988Sjohnlev  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17843e1988Sjohnlev  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18843e1988Sjohnlev  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19843e1988Sjohnlev  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20843e1988Sjohnlev  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21843e1988Sjohnlev  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22843e1988Sjohnlev  * DEALINGS IN THE SOFTWARE.
23843e1988Sjohnlev  *
24843e1988Sjohnlev  * Copyright (c) 2002-2006, K Fraser
25843e1988Sjohnlev  */
26843e1988Sjohnlev 
27843e1988Sjohnlev #ifndef __XEN_PUBLIC_PLATFORM_H__
28843e1988Sjohnlev #define __XEN_PUBLIC_PLATFORM_H__
29843e1988Sjohnlev 
30843e1988Sjohnlev #include "xen.h"
31843e1988Sjohnlev 
32843e1988Sjohnlev #define XENPF_INTERFACE_VERSION 0x03000001
33843e1988Sjohnlev 
34843e1988Sjohnlev /*
35843e1988Sjohnlev  * Set clock such that it would read <secs,nsecs> after 00:00:00 UTC,
36843e1988Sjohnlev  * 1 January, 1970 if the current system time was <system_time>.
37843e1988Sjohnlev  */
38843e1988Sjohnlev #define XENPF_settime             17
39843e1988Sjohnlev struct xenpf_settime {
40843e1988Sjohnlev     /* IN variables. */
41843e1988Sjohnlev     uint32_t secs;
42843e1988Sjohnlev     uint32_t nsecs;
43843e1988Sjohnlev     uint64_t system_time;
44843e1988Sjohnlev };
45843e1988Sjohnlev typedef struct xenpf_settime xenpf_settime_t;
46843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_settime_t);
47843e1988Sjohnlev 
48843e1988Sjohnlev /*
49843e1988Sjohnlev  * Request memory range (@mfn, @mfn+@nr_mfns-1) to have type @type.
50843e1988Sjohnlev  * On x86, @type is an architecture-defined MTRR memory type.
51843e1988Sjohnlev  * On success, returns the MTRR that was used (@reg) and a handle that can
52843e1988Sjohnlev  * be passed to XENPF_DEL_MEMTYPE to accurately tear down the new setting.
53843e1988Sjohnlev  * (x86-specific).
54843e1988Sjohnlev  */
55843e1988Sjohnlev #define XENPF_add_memtype         31
56843e1988Sjohnlev struct xenpf_add_memtype {
57843e1988Sjohnlev     /* IN variables. */
58843e1988Sjohnlev     xen_pfn_t mfn;
59843e1988Sjohnlev     uint64_t nr_mfns;
60843e1988Sjohnlev     uint32_t type;
61843e1988Sjohnlev     /* OUT variables. */
62843e1988Sjohnlev     uint32_t handle;
63843e1988Sjohnlev     uint32_t reg;
64843e1988Sjohnlev };
65843e1988Sjohnlev typedef struct xenpf_add_memtype xenpf_add_memtype_t;
66843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_add_memtype_t);
67843e1988Sjohnlev 
68843e1988Sjohnlev /*
69843e1988Sjohnlev  * Tear down an existing memory-range type. If @handle is remembered then it
70843e1988Sjohnlev  * should be passed in to accurately tear down the correct setting (in case
71843e1988Sjohnlev  * of overlapping memory regions with differing types). If it is not known
72843e1988Sjohnlev  * then @handle should be set to zero. In all cases @reg must be set.
73843e1988Sjohnlev  * (x86-specific).
74843e1988Sjohnlev  */
75843e1988Sjohnlev #define XENPF_del_memtype         32
76843e1988Sjohnlev struct xenpf_del_memtype {
77843e1988Sjohnlev     /* IN variables. */
78843e1988Sjohnlev     uint32_t handle;
79843e1988Sjohnlev     uint32_t reg;
80843e1988Sjohnlev };
81843e1988Sjohnlev typedef struct xenpf_del_memtype xenpf_del_memtype_t;
82843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_del_memtype_t);
83843e1988Sjohnlev 
84843e1988Sjohnlev /* Read current type of an MTRR (x86-specific). */
85843e1988Sjohnlev #define XENPF_read_memtype        33
86843e1988Sjohnlev struct xenpf_read_memtype {
87843e1988Sjohnlev     /* IN variables. */
88843e1988Sjohnlev     uint32_t reg;
89843e1988Sjohnlev     /* OUT variables. */
90843e1988Sjohnlev     xen_pfn_t mfn;
91843e1988Sjohnlev     uint64_t nr_mfns;
92843e1988Sjohnlev     uint32_t type;
93843e1988Sjohnlev };
94843e1988Sjohnlev typedef struct xenpf_read_memtype xenpf_read_memtype_t;
95843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_read_memtype_t);
96843e1988Sjohnlev 
97843e1988Sjohnlev #define XENPF_microcode_update    35
98843e1988Sjohnlev struct xenpf_microcode_update {
99843e1988Sjohnlev     /* IN variables. */
100349b53ddSStuart Maybee     XEN_GUEST_HANDLE(const_void) data;/* Pointer to microcode data */
101843e1988Sjohnlev     uint32_t length;                  /* Length of microcode data. */
102843e1988Sjohnlev };
103843e1988Sjohnlev typedef struct xenpf_microcode_update xenpf_microcode_update_t;
104843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_microcode_update_t);
105843e1988Sjohnlev 
106843e1988Sjohnlev #define XENPF_platform_quirk      39
107843e1988Sjohnlev #define QUIRK_NOIRQBALANCING      1 /* Do not restrict IO-APIC RTE targets */
108843e1988Sjohnlev #define QUIRK_IOAPIC_BAD_REGSEL   2 /* IO-APIC REGSEL forgets its value    */
109843e1988Sjohnlev #define QUIRK_IOAPIC_GOOD_REGSEL  3 /* IO-APIC REGSEL behaves properly     */
110843e1988Sjohnlev struct xenpf_platform_quirk {
111843e1988Sjohnlev     /* IN variables. */
112843e1988Sjohnlev     uint32_t quirk_id;
113843e1988Sjohnlev };
114843e1988Sjohnlev typedef struct xenpf_platform_quirk xenpf_platform_quirk_t;
115843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_platform_quirk_t);
116843e1988Sjohnlev 
117a576ab5bSrab #define XENPF_firmware_info       50
118a576ab5bSrab #define XEN_FW_DISK_INFO          1 /* from int 13 AH=08/41/48 */
119a576ab5bSrab #define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */
120a576ab5bSrab #define XEN_FW_VBEDDC_INFO        3 /* from int 10 AX=4f15 */
121a576ab5bSrab struct xenpf_firmware_info {
122a576ab5bSrab     /* IN variables. */
123a576ab5bSrab     uint32_t type;
124a576ab5bSrab     uint32_t index;
125a576ab5bSrab     /* OUT variables. */
126a576ab5bSrab     union {
127a576ab5bSrab         struct {
128a576ab5bSrab             /* Int13, Fn48: Check Extensions Present. */
129a576ab5bSrab             uint8_t device;                   /* %dl: bios device number */
130a576ab5bSrab             uint8_t version;                  /* %ah: major version      */
131a576ab5bSrab             uint16_t interface_support;       /* %cx: support bitmap     */
132a576ab5bSrab             /* Int13, Fn08: Legacy Get Device Parameters. */
133a576ab5bSrab             uint16_t legacy_max_cylinder;     /* %cl[7:6]:%ch: max cyl # */
134a576ab5bSrab             uint8_t legacy_max_head;          /* %dh: max head #         */
135a576ab5bSrab             uint8_t legacy_sectors_per_track; /* %cl[5:0]: max sector #  */
136a576ab5bSrab             /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */
137a576ab5bSrab             /* NB. First uint16_t of buffer must be set to buffer size.      */
138a576ab5bSrab             XEN_GUEST_HANDLE(void) edd_params;
139a576ab5bSrab         } disk_info; /* XEN_FW_DISK_INFO */
140a576ab5bSrab         struct {
141a576ab5bSrab             uint8_t device;                   /* bios device number  */
142a576ab5bSrab             uint32_t mbr_signature;           /* offset 0x1b8 in mbr */
143a576ab5bSrab         } disk_mbr_signature; /* XEN_FW_DISK_MBR_SIGNATURE */
144a576ab5bSrab         struct {
145a576ab5bSrab             /* Int10, AX=4F15: Get EDID info. */
146a576ab5bSrab             uint8_t capabilities;
147a576ab5bSrab             uint8_t edid_transfer_time;
148a576ab5bSrab             /* must refer to 128-byte buffer */
149349b53ddSStuart Maybee             XEN_GUEST_HANDLE(uint8) edid;
150a576ab5bSrab         } vbeddc_info; /* XEN_FW_VBEDDC_INFO */
151a576ab5bSrab     } u;
152a576ab5bSrab };
153a576ab5bSrab typedef struct xenpf_firmware_info xenpf_firmware_info_t;
154a576ab5bSrab DEFINE_XEN_GUEST_HANDLE(xenpf_firmware_info_t);
155a576ab5bSrab 
156349b53ddSStuart Maybee #define XENPF_enter_acpi_sleep    51
157349b53ddSStuart Maybee struct xenpf_enter_acpi_sleep {
158349b53ddSStuart Maybee     /* IN variables */
159349b53ddSStuart Maybee     uint16_t pm1a_cnt_val;      /* PM1a control value. */
160349b53ddSStuart Maybee     uint16_t pm1b_cnt_val;      /* PM1b control value. */
161349b53ddSStuart Maybee     uint32_t sleep_state;       /* Which state to enter (Sn). */
162349b53ddSStuart Maybee     uint32_t flags;             /* Must be zero. */
163349b53ddSStuart Maybee };
164349b53ddSStuart Maybee typedef struct xenpf_enter_acpi_sleep xenpf_enter_acpi_sleep_t;
165349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xenpf_enter_acpi_sleep_t);
166349b53ddSStuart Maybee 
167349b53ddSStuart Maybee #define XENPF_change_freq         52
168349b53ddSStuart Maybee struct xenpf_change_freq {
169349b53ddSStuart Maybee     /* IN variables */
170349b53ddSStuart Maybee     uint32_t flags; /* Must be zero. */
171349b53ddSStuart Maybee     uint32_t cpu;   /* Physical cpu. */
172349b53ddSStuart Maybee     uint64_t freq;  /* New frequency (Hz). */
173349b53ddSStuart Maybee };
174349b53ddSStuart Maybee typedef struct xenpf_change_freq xenpf_change_freq_t;
175349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xenpf_change_freq_t);
176349b53ddSStuart Maybee 
177349b53ddSStuart Maybee /*
178349b53ddSStuart Maybee  * Get idle times (nanoseconds since boot) for physical CPUs specified in the
179349b53ddSStuart Maybee  * @cpumap_bitmap with range [0..@cpumap_nr_cpus-1]. The @idletime array is
180349b53ddSStuart Maybee  * indexed by CPU number; only entries with the corresponding @cpumap_bitmap
181349b53ddSStuart Maybee  * bit set are written to. On return, @cpumap_bitmap is modified so that any
182349b53ddSStuart Maybee  * non-existent CPUs are cleared. Such CPUs have their @idletime array entry
183349b53ddSStuart Maybee  * cleared.
184349b53ddSStuart Maybee  */
185349b53ddSStuart Maybee #define XENPF_getidletime         53
186349b53ddSStuart Maybee struct xenpf_getidletime {
187349b53ddSStuart Maybee     /* IN/OUT variables */
188349b53ddSStuart Maybee     /* IN: CPUs to interrogate; OUT: subset of IN which are present */
189349b53ddSStuart Maybee     XEN_GUEST_HANDLE(uint8) cpumap_bitmap;
190349b53ddSStuart Maybee     /* IN variables */
191349b53ddSStuart Maybee     /* Size of cpumap bitmap. */
192349b53ddSStuart Maybee     uint32_t cpumap_nr_cpus;
193349b53ddSStuart Maybee     /* Must be indexable for every cpu in cpumap_bitmap. */
194349b53ddSStuart Maybee     XEN_GUEST_HANDLE(uint64) idletime;
195349b53ddSStuart Maybee     /* OUT variables */
196349b53ddSStuart Maybee     /* System time when the idletime snapshots were taken. */
197349b53ddSStuart Maybee     uint64_t now;
198349b53ddSStuart Maybee };
199349b53ddSStuart Maybee typedef struct xenpf_getidletime xenpf_getidletime_t;
200349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xenpf_getidletime_t);
201349b53ddSStuart Maybee 
202349b53ddSStuart Maybee #define XENPF_set_processor_pminfo      54
203349b53ddSStuart Maybee 
204349b53ddSStuart Maybee /* ability bits */
205349b53ddSStuart Maybee #define XEN_PROCESSOR_PM_CX	1
206349b53ddSStuart Maybee #define XEN_PROCESSOR_PM_PX	2
207349b53ddSStuart Maybee #define XEN_PROCESSOR_PM_TX	4
208349b53ddSStuart Maybee 
209349b53ddSStuart Maybee /* cmd type */
210349b53ddSStuart Maybee #define XEN_PM_CX   0
211349b53ddSStuart Maybee #define XEN_PM_PX   1
212349b53ddSStuart Maybee #define XEN_PM_TX   2
213349b53ddSStuart Maybee 
214349b53ddSStuart Maybee /* Px sub info type */
215349b53ddSStuart Maybee #define XEN_PX_PCT   1
216349b53ddSStuart Maybee #define XEN_PX_PSS   2
217349b53ddSStuart Maybee #define XEN_PX_PPC   4
218349b53ddSStuart Maybee #define XEN_PX_PSD   8
219349b53ddSStuart Maybee 
220349b53ddSStuart Maybee struct xen_power_register {
221349b53ddSStuart Maybee     uint32_t     space_id;
222349b53ddSStuart Maybee     uint32_t     bit_width;
223349b53ddSStuart Maybee     uint32_t     bit_offset;
224349b53ddSStuart Maybee     uint32_t     access_size;
225349b53ddSStuart Maybee     uint64_t     address;
226349b53ddSStuart Maybee };
227349b53ddSStuart Maybee 
228349b53ddSStuart Maybee struct xen_processor_csd {
229349b53ddSStuart Maybee     uint32_t    domain;      /* domain number of one dependent group */
230349b53ddSStuart Maybee     uint32_t    coord_type;  /* coordination type */
231349b53ddSStuart Maybee     uint32_t    num;         /* number of processors in same domain */
232349b53ddSStuart Maybee };
233349b53ddSStuart Maybee typedef struct xen_processor_csd xen_processor_csd_t;
234349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_processor_csd_t);
235349b53ddSStuart Maybee 
236349b53ddSStuart Maybee struct xen_processor_cx {
237349b53ddSStuart Maybee     struct xen_power_register  reg; /* GAS for Cx trigger register */
238349b53ddSStuart Maybee     uint8_t     type;     /* cstate value, c0: 0, c1: 1, ... */
239349b53ddSStuart Maybee     uint32_t    latency;  /* worst latency (ms) to enter/exit this cstate */
240349b53ddSStuart Maybee     uint32_t    power;    /* average power consumption(mW) */
241349b53ddSStuart Maybee     uint32_t    dpcnt;    /* number of dependency entries */
242349b53ddSStuart Maybee     XEN_GUEST_HANDLE(xen_processor_csd_t) dp; /* NULL if no dependency */
243349b53ddSStuart Maybee };
244349b53ddSStuart Maybee typedef struct xen_processor_cx xen_processor_cx_t;
245349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_processor_cx_t);
246349b53ddSStuart Maybee 
247349b53ddSStuart Maybee struct xen_processor_flags {
248349b53ddSStuart Maybee     uint32_t bm_control:1;
249349b53ddSStuart Maybee     uint32_t bm_check:1;
250349b53ddSStuart Maybee     uint32_t has_cst:1;
251349b53ddSStuart Maybee     uint32_t power_setup_done:1;
252349b53ddSStuart Maybee     uint32_t bm_rld_set:1;
253349b53ddSStuart Maybee };
254349b53ddSStuart Maybee 
255349b53ddSStuart Maybee struct xen_processor_power {
256349b53ddSStuart Maybee     uint32_t count;  /* number of C state entries in array below */
257349b53ddSStuart Maybee     struct xen_processor_flags flags;  /* global flags of this processor */
258349b53ddSStuart Maybee     XEN_GUEST_HANDLE(xen_processor_cx_t) states; /* supported c states */
259349b53ddSStuart Maybee };
260349b53ddSStuart Maybee 
261349b53ddSStuart Maybee struct xen_pct_register {
262349b53ddSStuart Maybee     uint8_t  descriptor;
263349b53ddSStuart Maybee     uint16_t length;
264349b53ddSStuart Maybee     uint8_t  space_id;
265349b53ddSStuart Maybee     uint8_t  bit_width;
266349b53ddSStuart Maybee     uint8_t  bit_offset;
267349b53ddSStuart Maybee     uint8_t  reserved;
268349b53ddSStuart Maybee     uint64_t address;
269349b53ddSStuart Maybee };
270349b53ddSStuart Maybee 
271349b53ddSStuart Maybee struct xen_processor_px {
272349b53ddSStuart Maybee     uint64_t core_frequency; /* megahertz */
273349b53ddSStuart Maybee     uint64_t power;      /* milliWatts */
274349b53ddSStuart Maybee     uint64_t transition_latency; /* microseconds */
275349b53ddSStuart Maybee     uint64_t bus_master_latency; /* microseconds */
276349b53ddSStuart Maybee     uint64_t control;        /* control value */
277349b53ddSStuart Maybee     uint64_t status;     /* success indicator */
278349b53ddSStuart Maybee };
279349b53ddSStuart Maybee typedef struct xen_processor_px xen_processor_px_t;
280349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_processor_px_t);
281349b53ddSStuart Maybee 
282349b53ddSStuart Maybee struct xen_psd_package {
283349b53ddSStuart Maybee     uint64_t num_entries;
284349b53ddSStuart Maybee     uint64_t revision;
285349b53ddSStuart Maybee     uint64_t domain;
286349b53ddSStuart Maybee     uint64_t coord_type;
287349b53ddSStuart Maybee     uint64_t num_processors;
288349b53ddSStuart Maybee };
289349b53ddSStuart Maybee 
290349b53ddSStuart Maybee struct xen_processor_performance {
291349b53ddSStuart Maybee     uint32_t flags;     /* flag for Px sub info type */
292*ad09f8b8SMark Johnson     uint32_t platform_limit;  /* Platform limitation on freq usage */
293349b53ddSStuart Maybee     struct xen_pct_register control_register;
294349b53ddSStuart Maybee     struct xen_pct_register status_register;
295349b53ddSStuart Maybee     uint32_t state_count;     /* total available performance states */
296349b53ddSStuart Maybee     XEN_GUEST_HANDLE(xen_processor_px_t) states;
297349b53ddSStuart Maybee     struct xen_psd_package domain_info;
298349b53ddSStuart Maybee     uint32_t shared_type;     /* coordination type of this processor */
299349b53ddSStuart Maybee };
300349b53ddSStuart Maybee typedef struct xen_processor_performance xen_processor_performance_t;
301349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xen_processor_performance_t);
302349b53ddSStuart Maybee 
303349b53ddSStuart Maybee struct xenpf_set_processor_pminfo {
304349b53ddSStuart Maybee     /* IN variables */
305349b53ddSStuart Maybee     uint32_t id;    /* ACPI CPU ID */
306349b53ddSStuart Maybee     uint32_t type;  /* {XEN_PM_CX, XEN_PM_PX} */
307349b53ddSStuart Maybee     union {
308349b53ddSStuart Maybee         struct xen_processor_power          power;/* Cx: _CST/_CSD */
309349b53ddSStuart Maybee         struct xen_processor_performance    perf; /* Px: _PPC/_PCT/_PSS/_PSD */
310349b53ddSStuart Maybee     } u;
311349b53ddSStuart Maybee };
312349b53ddSStuart Maybee typedef struct xenpf_set_processor_pminfo xenpf_set_processor_pminfo_t;
313349b53ddSStuart Maybee DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
314349b53ddSStuart Maybee 
315843e1988Sjohnlev #define XENPF_panic_init          40
316843e1988Sjohnlev struct xenpf_panic_init {
317843e1988Sjohnlev     unsigned long panic_addr;
318843e1988Sjohnlev };
319843e1988Sjohnlev typedef struct xenpf_panic_init xenpf_panic_init_t;
320843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xenpf_panic_init_t);
321843e1988Sjohnlev 
322843e1988Sjohnlev struct xen_platform_op {
323843e1988Sjohnlev     uint32_t cmd;
324843e1988Sjohnlev     uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
325843e1988Sjohnlev     union {
326843e1988Sjohnlev         struct xenpf_settime           settime;
327843e1988Sjohnlev         struct xenpf_add_memtype       add_memtype;
328843e1988Sjohnlev         struct xenpf_del_memtype       del_memtype;
329843e1988Sjohnlev         struct xenpf_read_memtype      read_memtype;
330843e1988Sjohnlev         struct xenpf_microcode_update  microcode;
331843e1988Sjohnlev         struct xenpf_platform_quirk    platform_quirk;
332a576ab5bSrab         struct xenpf_firmware_info     firmware_info;
333349b53ddSStuart Maybee         struct xenpf_enter_acpi_sleep  enter_acpi_sleep;
334349b53ddSStuart Maybee         struct xenpf_change_freq       change_freq;
335349b53ddSStuart Maybee         struct xenpf_getidletime       getidletime;
336349b53ddSStuart Maybee         struct xenpf_set_processor_pminfo set_pminfo;
337349b53ddSStuart Maybee         struct xenpf_panic_init        panic_init;
338843e1988Sjohnlev         uint8_t                        pad[128];
339843e1988Sjohnlev     } u;
340843e1988Sjohnlev };
341843e1988Sjohnlev typedef struct xen_platform_op xen_platform_op_t;
342843e1988Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_platform_op_t);
343843e1988Sjohnlev 
344843e1988Sjohnlev #endif /* __XEN_PUBLIC_PLATFORM_H__ */
345843e1988Sjohnlev 
346843e1988Sjohnlev /*
347843e1988Sjohnlev  * Local variables:
348843e1988Sjohnlev  * mode: C
349843e1988Sjohnlev  * c-set-style: "BSD"
350843e1988Sjohnlev  * c-basic-offset: 4
351