debuggers.hg

view xen/include/public/arch-ia64.h @ 19826:2f9e1348aa98

x86_64: allow more vCPU-s per guest

Since the shared info layout is fixed, guests are required to use
VCPUOP_register_vcpu_info prior to booting any vCPU beyond the
traditional limit of 32.

MAX_VIRT_CPUS, being an implemetation detail of the hypervisor, is no
longer being exposed in the public headers.

The tools changes are clearly incomplete (and done only so things
would
build again), and the current state of the tools (using scalar
variables all over the place to represent vCPU bitmaps) very likely
doesn't permit booting DomU-s with more than the traditional number of
vCPU-s. Testing of the extended functionality was done with Dom0 (96
vCPU-s, as well as 128 vCPU-s out of which the kernel elected - by way
of a simple kernel side patch - to use only some, resulting in a
sparse
bitmap).

ia64 changes only to make things build, and build-tested only (and the
tools part only as far as the build would go without encountering
unrelated problems in the blktap code).

Signed-off-by: Jan Beulich <jbeulich@novell.com>
author Keir Fraser <keir.fraser@citrix.com>
date Thu Jun 18 10:14:16 2009 +0100 (2009-06-18)
parents 4422219acd93
children 35318cc05a50
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 */