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