ia64/xen-unstable

view xen/include/public/arch-ia64.h @ 19848:5839491bbf20

[IA64] replace MAX_VCPUS with d->max_vcpus where necessary.

don't use MAX_VCPUS, and use vcpu::max_vcpus.
The changeset of 2f9e1348aa98 introduced max_vcpus to allow more vcpus
per guest. This patch is ia64 counter part.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
author Isaku Yamahata <yamahata@valinux.co.jp>
date Mon Jun 29 11:26:05 2009 +0900 (2009-06-29)
parents 2f9e1348aa98
children
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 #include "xen.h"
28 #ifndef __HYPERVISOR_IF_IA64_H__
29 #define __HYPERVISOR_IF_IA64_H__
31 #if !defined(__GNUC__) || defined(__STRICT_ANSI__)
32 #error "Anonymous structs/unions are a GNU extension."
33 #endif
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
44 #define __DEFINE_XEN_GUEST_HANDLE(name, type) \
45 ___DEFINE_XEN_GUEST_HANDLE(name, type); \
46 ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
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
57 #ifndef __ASSEMBLY__
58 typedef unsigned long xen_pfn_t;
59 #define PRI_xen_pfn "lx"
60 #endif
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 */
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 XEN_LEGACY_MAX_VCPUS 64
71 /* IO ports location for PV. */
72 #define IO_PORTS_PADDR 0x00000ffffc000000UL
73 #define IO_PORTS_SIZE 0x0000000004000000UL
75 #ifndef __ASSEMBLY__
77 typedef unsigned long xen_ulong_t;
79 #ifdef __XEN_TOOLS__
80 #define XEN_PAGE_SIZE XC_PAGE_SIZE
81 #else
82 #define XEN_PAGE_SIZE PAGE_SIZE
83 #endif
85 #define INVALID_MFN (~0UL)
87 struct pt_fpreg {
88 union {
89 unsigned long bits[2];
90 long double __dummy; /* force 16-byte alignment */
91 } u;
92 };
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;
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;
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)
202 /* itc paravirtualization
203 * vAR.ITC = mAR.ITC + itc_offset
204 * itc_last is one which was lastly passed to
205 * the guest OS in order to prevent it from
206 * going backwords.
207 */
208 unsigned long itc_offset;
209 unsigned long itc_last;
210 };
211 };
212 };
213 typedef struct mapped_regs mapped_regs_t;
215 struct vpd {
216 struct mapped_regs vpd_low;
217 unsigned long reserved6[3456];
218 unsigned long vmm_avail[128];
219 unsigned long reserved7[4096];
220 };
221 typedef struct vpd vpd_t;
223 struct arch_vcpu_info {
224 };
225 typedef struct arch_vcpu_info arch_vcpu_info_t;
227 /*
228 * This structure is used for magic page in domain pseudo physical address
229 * space and the result of XENMEM_machine_memory_map.
230 * As the XENMEM_machine_memory_map result,
231 * xen_memory_map::nr_entries indicates the size in bytes
232 * including struct xen_ia64_memmap_info. Not the number of entries.
233 */
234 struct xen_ia64_memmap_info {
235 uint64_t efi_memmap_size; /* size of EFI memory map */
236 uint64_t efi_memdesc_size; /* size of an EFI memory map descriptor */
237 uint32_t efi_memdesc_version; /* memory descriptor version */
238 void *memdesc[0]; /* array of efi_memory_desc_t */
239 };
240 typedef struct xen_ia64_memmap_info xen_ia64_memmap_info_t;
242 struct arch_shared_info {
243 /* PFN of the start_info page. */
244 unsigned long start_info_pfn;
246 /* Interrupt vector for event channel. */
247 int evtchn_vector;
249 /* PFN of memmap_info page */
250 unsigned int memmap_info_num_pages;/* currently only = 1 case is
251 supported. */
252 unsigned long memmap_info_pfn;
254 uint64_t pad[31];
255 };
256 typedef struct arch_shared_info arch_shared_info_t;
258 typedef unsigned long xen_callback_t;
260 struct ia64_tr_entry {
261 unsigned long pte;
262 unsigned long itir;
263 unsigned long vadr;
264 unsigned long rid;
265 };
266 typedef struct ia64_tr_entry ia64_tr_entry_t;
267 DEFINE_XEN_GUEST_HANDLE(ia64_tr_entry_t);
269 struct vcpu_tr_regs {
270 struct ia64_tr_entry itrs[12];
271 struct ia64_tr_entry dtrs[12];
272 };
274 union vcpu_ar_regs {
275 unsigned long ar[128];
276 struct {
277 unsigned long kr[8];
278 unsigned long rsv1[8];
279 unsigned long rsc;
280 unsigned long bsp;
281 unsigned long bspstore;
282 unsigned long rnat;
283 unsigned long rsv2;
284 unsigned long fcr;
285 unsigned long rsv3[2];
286 unsigned long eflag;
287 unsigned long csd;
288 unsigned long ssd;
289 unsigned long cflg;
290 unsigned long fsr;
291 unsigned long fir;
292 unsigned long fdr;
293 unsigned long rsv4;
294 unsigned long ccv; /* 32 */
295 unsigned long rsv5[3];
296 unsigned long unat;
297 unsigned long rsv6[3];
298 unsigned long fpsr;
299 unsigned long rsv7[3];
300 unsigned long itc;
301 unsigned long rsv8[3];
302 unsigned long ign1[16];
303 unsigned long pfs; /* 64 */
304 unsigned long lc;
305 unsigned long ec;
306 unsigned long rsv9[45];
307 unsigned long ign2[16];
308 };
309 };
311 union vcpu_cr_regs {
312 unsigned long cr[128];
313 struct {
314 unsigned long dcr; // CR0
315 unsigned long itm;
316 unsigned long iva;
317 unsigned long rsv1[5];
318 unsigned long pta; // CR8
319 unsigned long rsv2[7];
320 unsigned long ipsr; // CR16
321 unsigned long isr;
322 unsigned long rsv3;
323 unsigned long iip;
324 unsigned long ifa;
325 unsigned long itir;
326 unsigned long iipa;
327 unsigned long ifs;
328 unsigned long iim; // CR24
329 unsigned long iha;
330 unsigned long rsv4[38];
331 unsigned long lid; // CR64
332 unsigned long ivr;
333 unsigned long tpr;
334 unsigned long eoi;
335 unsigned long irr[4];
336 unsigned long itv; // CR72
337 unsigned long pmv;
338 unsigned long cmcv;
339 unsigned long rsv5[5];
340 unsigned long lrr0; // CR80
341 unsigned long lrr1;
342 unsigned long rsv6[46];
343 };
344 };
346 struct vcpu_guest_context_regs {
347 unsigned long r[32];
348 unsigned long b[8];
349 unsigned long bank[16];
350 unsigned long ip;
351 unsigned long psr;
352 unsigned long cfm;
353 unsigned long pr;
354 unsigned int nats; /* NaT bits for r1-r31. */
355 unsigned int bnats; /* Nat bits for banked registers. */
356 union vcpu_ar_regs ar;
357 union vcpu_cr_regs cr;
358 struct pt_fpreg f[128];
359 unsigned long dbr[8];
360 unsigned long ibr[8];
361 unsigned long rr[8];
362 unsigned long pkr[16];
364 /* FIXME: cpuid,pmd,pmc */
366 unsigned long xip;
367 unsigned long xpsr;
368 unsigned long xfs;
369 unsigned long xr[4];
371 struct vcpu_tr_regs tr;
373 /* Physical registers in case of debug event. */
374 unsigned long excp_iipa;
375 unsigned long excp_ifa;
376 unsigned long excp_isr;
377 unsigned int excp_vector;
379 /*
380 * The rbs is intended to be the image of the stacked registers still
381 * in the cpu (not yet stored in memory). It is laid out as if it
382 * were written in memory at a 512 (64*8) aligned address + offset.
383 * rbs_voff is (offset / 8). rbs_nat contains NaT bits for the
384 * remaining rbs registers. rbs_rnat contains NaT bits for in memory
385 * rbs registers.
386 * Note: loadrs is 2**14 bytes == 2**11 slots.
387 */
388 unsigned int rbs_voff;
389 unsigned long rbs[2048];
390 unsigned long rbs_rnat;
392 /*
393 * RSE.N_STACKED_PHYS via PAL_RSE_INFO
394 * Strictly this isn't cpu context, but this value is necessary
395 * for domain save/restore. So is here.
396 */
397 unsigned long num_phys_stacked;
398 };
400 struct vcpu_guest_context {
401 #define VGCF_EXTRA_REGS (1UL << 1) /* Set extra regs. */
402 #define VGCF_SET_CR_IRR (1UL << 2) /* Set cr_irr[0:3]. */
403 #define VGCF_online (1UL << 3) /* make this vcpu online */
404 #define VGCF_SET_AR_ITC (1UL << 4) /* set pv ar.itc. itc_offset, itc_last */
405 unsigned long flags; /* VGCF_* flags */
407 struct vcpu_guest_context_regs regs;
409 unsigned long event_callback_ip;
411 /* xen doesn't share privregs pages with hvm domain so that this member
412 * doesn't make sense for hvm domain.
413 * ~0UL is already used for INVALID_P2M_ENTRY. */
414 #define VGC_PRIVREGS_HVM (~(-2UL))
415 unsigned long privregs_pfn;
416 };
417 typedef struct vcpu_guest_context vcpu_guest_context_t;
418 DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
420 /* dom0 vp op */
421 #define __HYPERVISOR_ia64_dom0vp_op __HYPERVISOR_arch_0
422 /* Map io space in machine address to dom0 physical address space.
423 Currently physical assigned address equals to machine address. */
424 #define IA64_DOM0VP_ioremap 0
426 /* Convert a pseudo physical page frame number to the corresponding
427 machine page frame number. If no page is assigned, INVALID_MFN or
428 GPFN_INV_MASK is returned depending on domain's non-vti/vti mode. */
429 #define IA64_DOM0VP_phystomach 1
431 /* Convert a machine page frame number to the corresponding pseudo physical
432 page frame number of the caller domain. */
433 #define IA64_DOM0VP_machtophys 3
435 /* Reserved for future use. */
436 #define IA64_DOM0VP_iounmap 4
438 /* Unmap and free pages contained in the specified pseudo physical region. */
439 #define IA64_DOM0VP_zap_physmap 5
441 /* Assign machine page frame to dom0's pseudo physical address space. */
442 #define IA64_DOM0VP_add_physmap 6
444 /* expose the p2m table into domain */
445 #define IA64_DOM0VP_expose_p2m 7
447 /* xen perfmon */
448 #define IA64_DOM0VP_perfmon 8
450 /* gmfn version of IA64_DOM0VP_add_physmap */
451 #define IA64_DOM0VP_add_physmap_with_gmfn 9
453 /* get fpswa revision */
454 #define IA64_DOM0VP_fpswa_revision 10
456 /* Add an I/O port space range */
457 #define IA64_DOM0VP_add_io_space 11
459 /* expose the foreign domain's p2m table into privileged domain */
460 #define IA64_DOM0VP_expose_foreign_p2m 12
461 #define IA64_DOM0VP_EFP_ALLOC_PTE 0x1 /* allocate p2m table */
463 /* unexpose the foreign domain's p2m table into privileged domain */
464 #define IA64_DOM0VP_unexpose_foreign_p2m 13
466 /* get memmap_info and memmap. It is possible to map the page directly
467 by foreign page mapping, but there is a race between writer.
468 This hypercall avoids such race. */
469 #define IA64_DOM0VP_get_memmap 14
471 // flags for page assignement to pseudo physical address space
472 #define _ASSIGN_readonly 0
473 #define ASSIGN_readonly (1UL << _ASSIGN_readonly)
474 #define ASSIGN_writable (0UL << _ASSIGN_readonly) // dummy flag
475 /* Internal only: memory attribute must be WC/UC/UCE. */
476 #define _ASSIGN_nocache 1
477 #define ASSIGN_nocache (1UL << _ASSIGN_nocache)
478 // tlb tracking
479 #define _ASSIGN_tlb_track 2
480 #define ASSIGN_tlb_track (1UL << _ASSIGN_tlb_track)
481 /* Internal only: associated with PGC_allocated bit */
482 #define _ASSIGN_pgc_allocated 3
483 #define ASSIGN_pgc_allocated (1UL << _ASSIGN_pgc_allocated)
484 /* Page is an IO page. */
485 #define _ASSIGN_io 4
486 #define ASSIGN_io (1UL << _ASSIGN_io)
488 /* This structure has the same layout of struct ia64_boot_param, defined in
489 <asm/system.h>. It is redefined here to ease use. */
490 struct xen_ia64_boot_param {
491 unsigned long command_line; /* physical address of cmd line args */
492 unsigned long efi_systab; /* physical address of EFI system table */
493 unsigned long efi_memmap; /* physical address of EFI memory map */
494 unsigned long efi_memmap_size; /* size of EFI memory map */
495 unsigned long efi_memdesc_size; /* size of an EFI memory map descriptor */
496 unsigned int efi_memdesc_version; /* memory descriptor version */
497 struct {
498 unsigned short num_cols; /* number of columns on console. */
499 unsigned short num_rows; /* number of rows on console. */
500 unsigned short orig_x; /* cursor's x position */
501 unsigned short orig_y; /* cursor's y position */
502 } console_info;
503 unsigned long fpswa; /* physical address of the fpswa interface */
504 unsigned long initrd_start;
505 unsigned long initrd_size;
506 unsigned long domain_start; /* va where the boot time domain begins */
507 unsigned long domain_size; /* how big is the boot domain */
508 };
510 #endif /* !__ASSEMBLY__ */
512 /* Size of the shared_info area (this is not related to page size). */
513 #define XSI_SHIFT 14
514 #define XSI_SIZE (1 << XSI_SHIFT)
515 /* Log size of mapped_regs area (64 KB - only 4KB is used). */
516 #define XMAPPEDREGS_SHIFT 12
517 #define XMAPPEDREGS_SIZE (1 << XMAPPEDREGS_SHIFT)
518 /* Offset of XASI (Xen arch shared info) wrt XSI_BASE. */
519 #define XMAPPEDREGS_OFS XSI_SIZE
521 /* Hyperprivops. */
522 #define HYPERPRIVOP_START 0x1
523 #define HYPERPRIVOP_RFI (HYPERPRIVOP_START + 0x0)
524 #define HYPERPRIVOP_RSM_DT (HYPERPRIVOP_START + 0x1)
525 #define HYPERPRIVOP_SSM_DT (HYPERPRIVOP_START + 0x2)
526 #define HYPERPRIVOP_COVER (HYPERPRIVOP_START + 0x3)
527 #define HYPERPRIVOP_ITC_D (HYPERPRIVOP_START + 0x4)
528 #define HYPERPRIVOP_ITC_I (HYPERPRIVOP_START + 0x5)
529 #define HYPERPRIVOP_SSM_I (HYPERPRIVOP_START + 0x6)
530 #define HYPERPRIVOP_GET_IVR (HYPERPRIVOP_START + 0x7)
531 #define HYPERPRIVOP_GET_TPR (HYPERPRIVOP_START + 0x8)
532 #define HYPERPRIVOP_SET_TPR (HYPERPRIVOP_START + 0x9)
533 #define HYPERPRIVOP_EOI (HYPERPRIVOP_START + 0xa)
534 #define HYPERPRIVOP_SET_ITM (HYPERPRIVOP_START + 0xb)
535 #define HYPERPRIVOP_THASH (HYPERPRIVOP_START + 0xc)
536 #define HYPERPRIVOP_PTC_GA (HYPERPRIVOP_START + 0xd)
537 #define HYPERPRIVOP_ITR_D (HYPERPRIVOP_START + 0xe)
538 #define HYPERPRIVOP_GET_RR (HYPERPRIVOP_START + 0xf)
539 #define HYPERPRIVOP_SET_RR (HYPERPRIVOP_START + 0x10)
540 #define HYPERPRIVOP_SET_KR (HYPERPRIVOP_START + 0x11)
541 #define HYPERPRIVOP_FC (HYPERPRIVOP_START + 0x12)
542 #define HYPERPRIVOP_GET_CPUID (HYPERPRIVOP_START + 0x13)
543 #define HYPERPRIVOP_GET_PMD (HYPERPRIVOP_START + 0x14)
544 #define HYPERPRIVOP_GET_EFLAG (HYPERPRIVOP_START + 0x15)
545 #define HYPERPRIVOP_SET_EFLAG (HYPERPRIVOP_START + 0x16)
546 #define HYPERPRIVOP_RSM_BE (HYPERPRIVOP_START + 0x17)
547 #define HYPERPRIVOP_GET_PSR (HYPERPRIVOP_START + 0x18)
548 #define HYPERPRIVOP_SET_RR0_TO_RR4 (HYPERPRIVOP_START + 0x19)
549 #define HYPERPRIVOP_MAX (0x1a)
551 /* Fast and light hypercalls. */
552 #define __HYPERVISOR_ia64_fast_eoi __HYPERVISOR_arch_1
554 /* Extra debug features. */
555 #define __HYPERVISOR_ia64_debug_op __HYPERVISOR_arch_2
557 /* Xencomm macros. */
558 #define XENCOMM_INLINE_MASK 0xf800000000000000UL
559 #define XENCOMM_INLINE_FLAG 0x8000000000000000UL
561 #ifndef __ASSEMBLY__
563 /*
564 * Optimization features.
565 * The hypervisor may do some special optimizations for guests. This hypercall
566 * can be used to switch on/of these special optimizations.
567 */
568 #define __HYPERVISOR_opt_feature 0x700UL
570 #define XEN_IA64_OPTF_OFF 0x0
571 #define XEN_IA64_OPTF_ON 0x1
573 /*
574 * If this feature is switched on, the hypervisor inserts the
575 * tlb entries without calling the guests traphandler.
576 * This is useful in guests using region 7 for identity mapping
577 * like the linux kernel does.
578 */
579 #define XEN_IA64_OPTF_IDENT_MAP_REG7 1
581 /* Identity mapping of region 4 addresses in HVM. */
582 #define XEN_IA64_OPTF_IDENT_MAP_REG4 2
584 /* Identity mapping of region 5 addresses in HVM. */
585 #define XEN_IA64_OPTF_IDENT_MAP_REG5 3
587 #define XEN_IA64_OPTF_IDENT_MAP_NOT_SET (0)
589 struct xen_ia64_opt_feature {
590 unsigned long cmd; /* Which feature */
591 unsigned char on; /* Switch feature on/off */
592 union {
593 struct {
594 /* The page protection bit mask of the pte.
595 * This will be or'ed with the pte. */
596 unsigned long pgprot;
597 unsigned long key; /* A protection key for itir. */
598 };
599 };
600 };
602 #endif /* __ASSEMBLY__ */
604 /* xen perfmon */
605 #ifdef XEN
606 #ifndef __ASSEMBLY__
607 #ifndef _ASM_IA64_PERFMON_H
609 #include <xen/list.h> // asm/perfmon.h requires struct list_head
610 #include <asm/perfmon.h>
611 // for PFM_xxx and pfarg_features_t, pfarg_context_t, pfarg_reg_t, pfarg_load_t
613 #endif /* _ASM_IA64_PERFMON_H */
615 DEFINE_XEN_GUEST_HANDLE(pfarg_features_t);
616 DEFINE_XEN_GUEST_HANDLE(pfarg_context_t);
617 DEFINE_XEN_GUEST_HANDLE(pfarg_reg_t);
618 DEFINE_XEN_GUEST_HANDLE(pfarg_load_t);
619 #endif /* __ASSEMBLY__ */
620 #endif /* XEN */
622 #ifndef __ASSEMBLY__
623 #include "arch-ia64/hvm/memmap.h"
624 #endif
626 #endif /* __HYPERVISOR_IF_IA64_H__ */
628 /*
629 * Local variables:
630 * mode: C
631 * c-set-style: "BSD"
632 * c-basic-offset: 4
633 * tab-width: 4
634 * indent-tabs-mode: nil
635 * End:
636 */