ia64/xen-unstable

view xen/include/public/arch-ia64.h @ 15660:32825349924d

[IA64] Clean up unused pkrs[] handling.

Signed-off-by: Dietmar Hahn <dietmar.hahn@fujitsu-siemens.com>
author Alex Williamson <alex.williamson@hp.com>
date Mon Jul 30 16:01:05 2007 -0600 (2007-07-30)
parents 87b0b6a08dbd
children 77c87416fbd0
line source
1 /******************************************************************************
2 * arch-ia64/hypervisor-if.h
3 *
4 * Guest OS interface to IA64 Xen.
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 */
26 #ifndef __HYPERVISOR_IF_IA64_H__
27 #define __HYPERVISOR_IF_IA64_H__
29 /* Structural guest handles introduced in 0x00030201. */
30 #if __XEN_INTERFACE_VERSION__ >= 0x00030201
31 #define __DEFINE_XEN_GUEST_HANDLE(name, type) \
32 typedef struct { type *p; } __guest_handle_ ## name
33 #else
34 #define __DEFINE_XEN_GUEST_HANDLE(name, type) \
35 typedef type * __guest_handle_ ## name
36 #endif
38 #define DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)
39 #define XEN_GUEST_HANDLE(name) __guest_handle_ ## name
40 #define XEN_GUEST_HANDLE_64(name) XEN_GUEST_HANDLE(name)
41 #define uint64_aligned_t uint64_t
42 #define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0)
43 #ifdef __XEN_TOOLS__
44 #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
45 #endif
47 #ifndef __ASSEMBLY__
48 /* Guest handles for primitive C types. */
49 __DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);
50 __DEFINE_XEN_GUEST_HANDLE(uint, unsigned int);
51 __DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);
52 __DEFINE_XEN_GUEST_HANDLE(u64, unsigned long);
53 DEFINE_XEN_GUEST_HANDLE(char);
54 DEFINE_XEN_GUEST_HANDLE(int);
55 DEFINE_XEN_GUEST_HANDLE(long);
56 DEFINE_XEN_GUEST_HANDLE(void);
58 typedef unsigned long xen_pfn_t;
59 DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);
60 #define PRI_xen_pfn "lx"
61 #endif
63 /* Arch specific VIRQs definition */
64 #define VIRQ_ITC VIRQ_ARCH_0 /* V. Virtual itc timer */
65 #define VIRQ_MCA_CMC VIRQ_ARCH_1 /* MCA cmc interrupt */
66 #define VIRQ_MCA_CPE VIRQ_ARCH_2 /* MCA cpe interrupt */
68 /* Maximum number of virtual CPUs in multi-processor guests. */
69 /* WARNING: before changing this, check that shared_info fits on a page */
70 #define MAX_VIRT_CPUS 64
72 #ifndef __ASSEMBLY__
74 typedef unsigned long xen_ulong_t;
76 #define INVALID_MFN (~0UL)
78 #define MEM_G (1UL << 30)
79 #define MEM_M (1UL << 20)
80 #define MEM_K (1UL << 10)
82 /* Guest physical address of IO ports space. */
83 #define IO_PORTS_PADDR 0x00000ffffc000000UL
84 #define IO_PORTS_SIZE 0x0000000004000000UL
86 #define MMIO_START (3 * MEM_G)
87 #define MMIO_SIZE (512 * MEM_M)
89 #define VGA_IO_START 0xA0000UL
90 #define VGA_IO_SIZE 0x20000
92 #define LEGACY_IO_START (MMIO_START + MMIO_SIZE)
93 #define LEGACY_IO_SIZE (64*MEM_M)
95 #define IO_PAGE_START (LEGACY_IO_START + LEGACY_IO_SIZE)
96 #define IO_PAGE_SIZE PAGE_SIZE
98 #define STORE_PAGE_START (IO_PAGE_START + IO_PAGE_SIZE)
99 #define STORE_PAGE_SIZE PAGE_SIZE
101 #define BUFFER_IO_PAGE_START (STORE_PAGE_START+STORE_PAGE_SIZE)
102 #define BUFFER_IO_PAGE_SIZE PAGE_SIZE
104 #define BUFFER_PIO_PAGE_START (BUFFER_IO_PAGE_START+BUFFER_IO_PAGE_SIZE)
105 #define BUFFER_PIO_PAGE_SIZE PAGE_SIZE
107 #define IO_SAPIC_START 0xfec00000UL
108 #define IO_SAPIC_SIZE 0x100000
110 #define PIB_START 0xfee00000UL
111 #define PIB_SIZE 0x200000
113 #define GFW_START (4*MEM_G -16*MEM_M)
114 #define GFW_SIZE (16*MEM_M)
116 /* Nvram belongs to GFW memory space */
117 #define NVRAM_SIZE (MEM_K * 64)
118 #define NVRAM_START (GFW_START + 10 * MEM_M)
120 #define NVRAM_VALID_SIG 0x4650494e45584948 // "HIXENIPF"
121 struct nvram_save_addr {
122 unsigned long addr;
123 unsigned long signature;
124 };
126 struct pt_fpreg {
127 union {
128 unsigned long bits[2];
129 long double __dummy; /* force 16-byte alignment */
130 } u;
131 };
133 union vac {
134 unsigned long value;
135 struct {
136 int a_int:1;
137 int a_from_int_cr:1;
138 int a_to_int_cr:1;
139 int a_from_psr:1;
140 int a_from_cpuid:1;
141 int a_cover:1;
142 int a_bsw:1;
143 long reserved:57;
144 };
145 };
146 typedef union vac vac_t;
148 union vdc {
149 unsigned long value;
150 struct {
151 int d_vmsw:1;
152 int d_extint:1;
153 int d_ibr_dbr:1;
154 int d_pmc:1;
155 int d_to_pmd:1;
156 int d_itm:1;
157 long reserved:58;
158 };
159 };
160 typedef union vdc vdc_t;
162 struct mapped_regs {
163 union vac vac;
164 union vdc vdc;
165 unsigned long virt_env_vaddr;
166 unsigned long reserved1[29];
167 unsigned long vhpi;
168 unsigned long reserved2[95];
169 union {
170 unsigned long vgr[16];
171 unsigned long bank1_regs[16]; // bank1 regs (r16-r31) when bank0 active
172 };
173 union {
174 unsigned long vbgr[16];
175 unsigned long bank0_regs[16]; // bank0 regs (r16-r31) when bank1 active
176 };
177 unsigned long vnat;
178 unsigned long vbnat;
179 unsigned long vcpuid[5];
180 unsigned long reserved3[11];
181 unsigned long vpsr;
182 unsigned long vpr;
183 unsigned long reserved4[76];
184 union {
185 unsigned long vcr[128];
186 struct {
187 unsigned long dcr; // CR0
188 unsigned long itm;
189 unsigned long iva;
190 unsigned long rsv1[5];
191 unsigned long pta; // CR8
192 unsigned long rsv2[7];
193 unsigned long ipsr; // CR16
194 unsigned long isr;
195 unsigned long rsv3;
196 unsigned long iip;
197 unsigned long ifa;
198 unsigned long itir;
199 unsigned long iipa;
200 unsigned long ifs;
201 unsigned long iim; // CR24
202 unsigned long iha;
203 unsigned long rsv4[38];
204 unsigned long lid; // CR64
205 unsigned long ivr;
206 unsigned long tpr;
207 unsigned long eoi;
208 unsigned long irr[4];
209 unsigned long itv; // CR72
210 unsigned long pmv;
211 unsigned long cmcv;
212 unsigned long rsv5[5];
213 unsigned long lrr0; // CR80
214 unsigned long lrr1;
215 unsigned long rsv6[46];
216 };
217 };
218 union {
219 unsigned long reserved5[128];
220 struct {
221 unsigned long precover_ifs;
222 unsigned long unat; // not sure if this is needed until NaT arch is done
223 int interrupt_collection_enabled; // virtual psr.ic
224 /* virtual interrupt deliverable flag is evtchn_upcall_mask in
225 * shared info area now. interrupt_mask_addr is the address
226 * of evtchn_upcall_mask for current vcpu
227 */
228 unsigned char *interrupt_mask_addr;
229 int pending_interruption;
230 unsigned char vpsr_pp;
231 unsigned char vpsr_dfh;
232 unsigned char hpsr_dfh;
233 unsigned char hpsr_mfh;
234 unsigned long reserved5_1[4];
235 int metaphysical_mode; // 1 = use metaphys mapping, 0 = use virtual
236 int banknum; // 0 or 1, which virtual register bank is active
237 unsigned long rrs[8]; // region registers
238 unsigned long krs[8]; // kernel registers
239 unsigned long tmp[16]; // temp registers (e.g. for hyperprivops)
240 };
241 };
242 };
243 typedef struct mapped_regs mapped_regs_t;
245 struct vpd {
246 struct mapped_regs vpd_low;
247 unsigned long reserved6[3456];
248 unsigned long vmm_avail[128];
249 unsigned long reserved7[4096];
250 };
251 typedef struct vpd vpd_t;
253 struct arch_vcpu_info {
254 };
255 typedef struct arch_vcpu_info arch_vcpu_info_t;
257 /*
258 * This structure is used for magic page in domain pseudo physical address
259 * space and the result of XENMEM_machine_memory_map.
260 * As the XENMEM_machine_memory_map result,
261 * xen_memory_map::nr_entries indicates the size in bytes
262 * including struct xen_ia64_memmap_info. Not the number of entries.
263 */
264 struct xen_ia64_memmap_info {
265 uint64_t efi_memmap_size; /* size of EFI memory map */
266 uint64_t efi_memdesc_size; /* size of an EFI memory map descriptor */
267 uint32_t efi_memdesc_version; /* memory descriptor version */
268 void *memdesc[0]; /* array of efi_memory_desc_t */
269 };
270 typedef struct xen_ia64_memmap_info xen_ia64_memmap_info_t;
272 struct arch_shared_info {
273 /* PFN of the start_info page. */
274 unsigned long start_info_pfn;
276 /* Interrupt vector for event channel. */
277 int evtchn_vector;
279 /* PFN of memmap_info page */
280 unsigned int memmap_info_num_pages;/* currently only = 1 case is
281 supported. */
282 unsigned long memmap_info_pfn;
284 uint64_t pad[31];
285 };
286 typedef struct arch_shared_info arch_shared_info_t;
288 typedef unsigned long xen_callback_t;
290 struct ia64_tr_entry {
291 unsigned long pte;
292 unsigned long itir;
293 unsigned long vadr;
294 unsigned long rid;
295 };
297 struct vcpu_tr_regs {
298 struct ia64_tr_entry itrs[8];
299 struct ia64_tr_entry dtrs[8];
300 };
302 union vcpu_ar_regs {
303 unsigned long ar[128];
304 struct {
305 unsigned long kr[8];
306 unsigned long rsv1[8];
307 unsigned long rsc;
308 unsigned long bsp;
309 unsigned long bspstore;
310 unsigned long rnat;
311 unsigned long rsv2;
312 unsigned long fcr;
313 unsigned long rsv3[2];
314 unsigned long eflag;
315 unsigned long csd;
316 unsigned long ssd;
317 unsigned long cflg;
318 unsigned long fsr;
319 unsigned long fir;
320 unsigned long fdr;
321 unsigned long rsv4;
322 unsigned long ccv; /* 32 */
323 unsigned long rsv5[3];
324 unsigned long unat;
325 unsigned long rsv6[3];
326 unsigned long fpsr;
327 unsigned long rsv7[3];
328 unsigned long itc;
329 unsigned long rsv8[3];
330 unsigned long ign1[16];
331 unsigned long pfs; /* 64 */
332 unsigned long lc;
333 unsigned long ec;
334 unsigned long rsv9[45];
335 unsigned long ign2[16];
336 };
337 };
339 union vcpu_cr_regs {
340 unsigned long cr[128];
341 struct {
342 unsigned long dcr; // CR0
343 unsigned long itm;
344 unsigned long iva;
345 unsigned long rsv1[5];
346 unsigned long pta; // CR8
347 unsigned long rsv2[7];
348 unsigned long ipsr; // CR16
349 unsigned long isr;
350 unsigned long rsv3;
351 unsigned long iip;
352 unsigned long ifa;
353 unsigned long itir;
354 unsigned long iipa;
355 unsigned long ifs;
356 unsigned long iim; // CR24
357 unsigned long iha;
358 unsigned long rsv4[38];
359 unsigned long lid; // CR64
360 unsigned long ivr;
361 unsigned long tpr;
362 unsigned long eoi;
363 unsigned long irr[4];
364 unsigned long itv; // CR72
365 unsigned long pmv;
366 unsigned long cmcv;
367 unsigned long rsv5[5];
368 unsigned long lrr0; // CR80
369 unsigned long lrr1;
370 unsigned long rsv6[46];
371 };
372 };
374 struct vcpu_guest_context_regs {
375 unsigned long r[32];
376 unsigned long b[8];
377 unsigned long bank[16];
378 unsigned long ip;
379 unsigned long psr;
380 unsigned long cfm;
381 unsigned long pr;
382 unsigned int nats; /* NaT bits for r1-r31. */
383 unsigned int bnats; /* Nat bits for banked registers. */
384 union vcpu_ar_regs ar;
385 union vcpu_cr_regs cr;
386 struct pt_fpreg f[128];
387 unsigned long dbr[8];
388 unsigned long ibr[8];
389 unsigned long rr[8];
390 unsigned long pkr[16];
392 /* FIXME: cpuid,pmd,pmc */
394 unsigned long xip;
395 unsigned long xpsr;
396 unsigned long xfs;
397 unsigned long xr[4];
399 struct vcpu_tr_regs tr;
401 /* Physical registers in case of debug event. */
402 unsigned long excp_iipa;
403 unsigned long excp_isr;
404 unsigned int excp_vector;
406 /*
407 * The rbs is intended to be the image of the stacked registers still
408 * in the cpu (not yet stored in memory). It is laid out as if it
409 * were written in memory at a 512 (64*8) aligned address + offset.
410 * rbs_voff is (offset / 8). rbs_nat contains NaT bits for the
411 * remaining rbs registers. rbs_rnat contains NaT bits for in memory
412 * rbs registers.
413 * Note: loadrs is 2**14 bytes == 2**11 slots.
414 */
415 unsigned int rbs_voff;
416 unsigned long rbs[2048];
417 unsigned long rbs_nat;
418 unsigned long rbs_rnat;
419 };
421 struct vcpu_guest_context {
422 #define VGCF_EXTRA_REGS (1<<1) /* Get/Set extra regs. */
423 unsigned long flags; /* VGCF_* flags */
425 struct vcpu_guest_context_regs regs;
427 unsigned long event_callback_ip;
428 unsigned long privregs_pfn;
429 };
430 typedef struct vcpu_guest_context vcpu_guest_context_t;
431 DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
433 /* dom0 vp op */
434 #define __HYPERVISOR_ia64_dom0vp_op __HYPERVISOR_arch_0
435 /* Map io space in machine address to dom0 physical address space.
436 Currently physical assigned address equals to machine address. */
437 #define IA64_DOM0VP_ioremap 0
439 /* Convert a pseudo physical page frame number to the corresponding
440 machine page frame number. If no page is assigned, INVALID_MFN or
441 GPFN_INV_MASK is returned depending on domain's non-vti/vti mode. */
442 #define IA64_DOM0VP_phystomach 1
444 /* Convert a machine page frame number to the corresponding pseudo physical
445 page frame number of the caller domain. */
446 #define IA64_DOM0VP_machtophys 3
448 /* Reserved for future use. */
449 #define IA64_DOM0VP_iounmap 4
451 /* Unmap and free pages contained in the specified pseudo physical region. */
452 #define IA64_DOM0VP_zap_physmap 5
454 /* Assign machine page frame to dom0's pseudo physical address space. */
455 #define IA64_DOM0VP_add_physmap 6
457 /* expose the p2m table into domain */
458 #define IA64_DOM0VP_expose_p2m 7
460 /* xen perfmon */
461 #define IA64_DOM0VP_perfmon 8
463 /* gmfn version of IA64_DOM0VP_add_physmap */
464 #define IA64_DOM0VP_add_physmap_with_gmfn 9
466 /* get fpswa revision */
467 #define IA64_DOM0VP_fpswa_revision 10
469 /* Add an I/O port space range */
470 #define IA64_DOM0VP_add_io_space 11
472 // flags for page assignement to pseudo physical address space
473 #define _ASSIGN_readonly 0
474 #define ASSIGN_readonly (1UL << _ASSIGN_readonly)
475 #define ASSIGN_writable (0UL << _ASSIGN_readonly) // dummy flag
476 /* Internal only: memory attribute must be WC/UC/UCE. */
477 #define _ASSIGN_nocache 1
478 #define ASSIGN_nocache (1UL << _ASSIGN_nocache)
479 // tlb tracking
480 #define _ASSIGN_tlb_track 2
481 #define ASSIGN_tlb_track (1UL << _ASSIGN_tlb_track)
482 /* Internal only: associated with PGC_allocated bit */
483 #define _ASSIGN_pgc_allocated 3
484 #define ASSIGN_pgc_allocated (1UL << _ASSIGN_pgc_allocated)
486 /* This structure has the same layout of struct ia64_boot_param, defined in
487 <asm/system.h>. It is redefined here to ease use. */
488 struct xen_ia64_boot_param {
489 unsigned long command_line; /* physical address of cmd line args */
490 unsigned long efi_systab; /* physical address of EFI system table */
491 unsigned long efi_memmap; /* physical address of EFI memory map */
492 unsigned long efi_memmap_size; /* size of EFI memory map */
493 unsigned long efi_memdesc_size; /* size of an EFI memory map descriptor */
494 unsigned int efi_memdesc_version; /* memory descriptor version */
495 struct {
496 unsigned short num_cols; /* number of columns on console. */
497 unsigned short num_rows; /* number of rows on console. */
498 unsigned short orig_x; /* cursor's x position */
499 unsigned short orig_y; /* cursor's y position */
500 } console_info;
501 unsigned long fpswa; /* physical address of the fpswa interface */
502 unsigned long initrd_start;
503 unsigned long initrd_size;
504 unsigned long domain_start; /* va where the boot time domain begins */
505 unsigned long domain_size; /* how big is the boot domain */
506 };
508 #endif /* !__ASSEMBLY__ */
510 /* Size of the shared_info area (this is not related to page size). */
511 #define XSI_SHIFT 14
512 #define XSI_SIZE (1 << XSI_SHIFT)
513 /* Log size of mapped_regs area (64 KB - only 4KB is used). */
514 #define XMAPPEDREGS_SHIFT 12
515 #define XMAPPEDREGS_SIZE (1 << XMAPPEDREGS_SHIFT)
516 /* Offset of XASI (Xen arch shared info) wrt XSI_BASE. */
517 #define XMAPPEDREGS_OFS XSI_SIZE
519 /* Hyperprivops. */
520 #define HYPERPRIVOP_START 0x1
521 #define HYPERPRIVOP_RFI (HYPERPRIVOP_START + 0x0)
522 #define HYPERPRIVOP_RSM_DT (HYPERPRIVOP_START + 0x1)
523 #define HYPERPRIVOP_SSM_DT (HYPERPRIVOP_START + 0x2)
524 #define HYPERPRIVOP_COVER (HYPERPRIVOP_START + 0x3)
525 #define HYPERPRIVOP_ITC_D (HYPERPRIVOP_START + 0x4)
526 #define HYPERPRIVOP_ITC_I (HYPERPRIVOP_START + 0x5)
527 #define HYPERPRIVOP_SSM_I (HYPERPRIVOP_START + 0x6)
528 #define HYPERPRIVOP_GET_IVR (HYPERPRIVOP_START + 0x7)
529 #define HYPERPRIVOP_GET_TPR (HYPERPRIVOP_START + 0x8)
530 #define HYPERPRIVOP_SET_TPR (HYPERPRIVOP_START + 0x9)
531 #define HYPERPRIVOP_EOI (HYPERPRIVOP_START + 0xa)
532 #define HYPERPRIVOP_SET_ITM (HYPERPRIVOP_START + 0xb)
533 #define HYPERPRIVOP_THASH (HYPERPRIVOP_START + 0xc)
534 #define HYPERPRIVOP_PTC_GA (HYPERPRIVOP_START + 0xd)
535 #define HYPERPRIVOP_ITR_D (HYPERPRIVOP_START + 0xe)
536 #define HYPERPRIVOP_GET_RR (HYPERPRIVOP_START + 0xf)
537 #define HYPERPRIVOP_SET_RR (HYPERPRIVOP_START + 0x10)
538 #define HYPERPRIVOP_SET_KR (HYPERPRIVOP_START + 0x11)
539 #define HYPERPRIVOP_FC (HYPERPRIVOP_START + 0x12)
540 #define HYPERPRIVOP_GET_CPUID (HYPERPRIVOP_START + 0x13)
541 #define HYPERPRIVOP_GET_PMD (HYPERPRIVOP_START + 0x14)
542 #define HYPERPRIVOP_GET_EFLAG (HYPERPRIVOP_START + 0x15)
543 #define HYPERPRIVOP_SET_EFLAG (HYPERPRIVOP_START + 0x16)
544 #define HYPERPRIVOP_RSM_BE (HYPERPRIVOP_START + 0x17)
545 #define HYPERPRIVOP_GET_PSR (HYPERPRIVOP_START + 0x18)
546 #define HYPERPRIVOP_MAX (0x19)
548 /* Fast and light hypercalls. */
549 #define __HYPERVISOR_ia64_fast_eoi __HYPERVISOR_arch_1
551 /* Xencomm macros. */
552 #define XENCOMM_INLINE_MASK 0xf800000000000000UL
553 #define XENCOMM_INLINE_FLAG 0x8000000000000000UL
555 #define XENCOMM_IS_INLINE(addr) \
556 (((unsigned long)(addr) & XENCOMM_INLINE_MASK) == XENCOMM_INLINE_FLAG)
557 #define XENCOMM_INLINE_ADDR(addr) \
558 ((unsigned long)(addr) & ~XENCOMM_INLINE_MASK)
560 #ifndef __ASSEMBLY__
562 /*
563 * Optimization features.
564 * The hypervisor may do some special optimizations for guests. This hypercall
565 * can be used to switch on/of these special optimizations.
566 */
567 #define __HYPERVISOR_opt_feature 0x700UL
569 #define XEN_IA64_OPTF_OFF 0x0
570 #define XEN_IA64_OPTF_ON 0x1
572 /*
573 * If this feature is switched on, the hypervisor inserts the
574 * tlb entries without calling the guests traphandler.
575 * This is useful in guests using region 7 for identity mapping
576 * like the linux kernel does.
577 */
578 #define XEN_IA64_OPTF_IDENT_MAP_REG7 0x1UL
580 struct xen_ia64_opt_feature {
581 unsigned long cmd; /* Which feature */
582 unsigned char on; /* Switch feature on/off */
583 union {
584 struct {
585 /* The page protection bit mask of the pte.
586 * This will be or'ed with the pte. */
587 unsigned long pgprot;
588 unsigned long key; /* A protection key for itir. */
589 };
590 };
591 };
593 #endif /* __ASSEMBLY__ */
595 /* xen perfmon */
596 #ifdef XEN
597 #ifndef __ASSEMBLY__
598 #ifndef _ASM_IA64_PERFMON_H
600 #include <xen/list.h> // asm/perfmon.h requires struct list_head
601 #include <asm/perfmon.h>
602 // for PFM_xxx and pfarg_features_t, pfarg_context_t, pfarg_reg_t, pfarg_load_t
604 #endif /* _ASM_IA64_PERFMON_H */
606 DEFINE_XEN_GUEST_HANDLE(pfarg_features_t);
607 DEFINE_XEN_GUEST_HANDLE(pfarg_context_t);
608 DEFINE_XEN_GUEST_HANDLE(pfarg_reg_t);
609 DEFINE_XEN_GUEST_HANDLE(pfarg_load_t);
610 #endif /* __ASSEMBLY__ */
611 #endif /* XEN */
613 #endif /* __HYPERVISOR_IF_IA64_H__ */
615 /*
616 * Local variables:
617 * mode: C
618 * c-set-style: "BSD"
619 * c-basic-offset: 4
620 * tab-width: 4
621 * indent-tabs-mode: nil
622 * End:
623 */