source: trunk/packages/xen-common/xen-common/xen/include/asm-ia64/domain.h @ 34

Last change on this file since 34 was 34, checked in by hartmans, 17 years ago

Add xen and xen-common

File size: 6.7 KB
Line 
1#ifndef __ASM_DOMAIN_H__
2#define __ASM_DOMAIN_H__
3
4#include <linux/thread_info.h>
5#include <asm/tlb.h>
6#include <asm/vmx_vpd.h>
7#include <asm/vmmu.h>
8#include <asm/regionreg.h>
9#include <public/xen.h>
10#include <asm/vmx_platform.h>
11#include <xen/list.h>
12#include <xen/cpumask.h>
13#include <asm/fpswa.h>
14#include <xen/rangeset.h>
15
16struct p2m_entry;
17#ifdef CONFIG_XEN_IA64_TLB_TRACK
18struct tlb_track;
19#endif
20
21extern void domain_relinquish_resources(struct domain *);
22struct vcpu;
23extern void relinquish_vcpu_resources(struct vcpu *v);
24extern void vcpu_share_privregs_with_guest(struct vcpu *v);
25extern int vcpu_late_initialise(struct vcpu *v);
26
27/* given a current domain metaphysical address, return the physical address */
28extern unsigned long translate_domain_mpaddr(unsigned long mpaddr,
29                                             struct p2m_entry* entry);
30
31/* Set shared_info virtual address.  */
32extern unsigned long domain_set_shared_info_va (unsigned long va);
33
34/* Flush cache of domain d.
35   If sync_only is true, only synchronize I&D caches,
36   if false, flush and invalidate caches.  */
37extern void domain_cache_flush (struct domain *d, int sync_only);
38
39/* Control the shadow mode.  */
40extern int shadow_mode_control(struct domain *d, xen_domctl_shadow_op_t *sc);
41
42/* Cleanly crash the current domain with a message.  */
43extern void panic_domain(struct pt_regs *, const char *, ...)
44     __attribute__ ((noreturn, format (printf, 2, 3)));
45
46struct mm_struct {
47        volatile pgd_t * pgd;
48    //  atomic_t mm_users;                      /* How many users with user space? */
49};
50
51struct last_vcpu {
52#define INVALID_VCPU_ID INT_MAX
53    int vcpu_id;
54#ifdef CONFIG_XEN_IA64_TLBFLUSH_CLOCK
55    u32 tlbflush_timestamp;
56#endif
57} ____cacheline_aligned_in_smp;
58
59/* These are data in domain memory for SAL emulator.  */
60struct xen_sal_data {
61    /* OS boot rendez vous.  */
62    unsigned long boot_rdv_ip;
63    unsigned long boot_rdv_r1;
64
65    /* There are these for EFI_SET_VIRTUAL_ADDRESS_MAP emulation. */
66    int efi_virt_mode;          /* phys : 0 , virt : 1 */
67};
68
69struct arch_domain {
70    struct mm_struct mm;
71
72    /* Flags.  */
73    union {
74        unsigned long flags;
75        struct {
76            unsigned int is_vti : 1;
77#ifdef CONFIG_XEN_IA64_PERVCPU_VHPT
78            unsigned int has_pervcpu_vhpt : 1;
79#endif
80        };
81    };
82
83    /* maximum metaphysical address of conventional memory */
84    u64 convmem_end;
85
86    /* Allowed accesses to io ports.  */
87    struct rangeset *ioport_caps;
88
89    /* There are two ranges of RID for a domain:
90       one big range, used to virtualize domain RID,
91       one small range for internal Xen use (metaphysical).  */
92    /* Big range.  */
93    int starting_rid;           /* first RID assigned to domain */
94    int ending_rid;             /* one beyond highest RID assigned to domain */
95    /* Metaphysical range.  */
96    int starting_mp_rid;
97    int ending_mp_rid;
98    /* RID for metaphysical mode.  */
99    unsigned long metaphysical_rr0;
100    unsigned long metaphysical_rr4;
101   
102    int rid_bits;               /* number of virtual rid bits (default: 18) */
103    int breakimm;     /* The imm value for hypercalls.  */
104
105    struct virtual_platform_def     vmx_platform;
106#define hvm_domain vmx_platform /* platform defs are not vmx specific */
107
108    u64 xen_vastart;
109    u64 xen_vaend;
110    u64 shared_info_va;
111 
112    /* Address of SAL emulator data  */
113    struct xen_sal_data *sal_data;
114
115    /* Address of efi_runtime_services_t (placed in domain memory)  */
116    void *efi_runtime;
117    /* Address of fpswa_interface_t (placed in domain memory)  */
118    void *fpswa_inf;
119
120    /* Bitmap of shadow dirty bits.
121       Set iff shadow mode is enabled.  */
122    u64 *shadow_bitmap;
123    /* Length (in bits!) of shadow bitmap.  */
124    unsigned long shadow_bitmap_size;
125    /* Number of bits set in bitmap.  */
126    atomic64_t shadow_dirty_count;
127    /* Number of faults.  */
128    atomic64_t shadow_fault_count;
129
130    struct last_vcpu last_vcpu[NR_CPUS];
131
132#ifdef CONFIG_XEN_IA64_TLB_TRACK
133    struct tlb_track*   tlb_track;
134#endif
135};
136#define INT_ENABLE_OFFSET(v)              \
137    (sizeof(vcpu_info_t) * (v)->vcpu_id + \
138    offsetof(vcpu_info_t, evtchn_upcall_mask))
139
140#ifdef CONFIG_XEN_IA64_PERVCPU_VHPT
141#define HAS_PERVCPU_VHPT(d)     ((d)->arch.has_pervcpu_vhpt)
142#else
143#define HAS_PERVCPU_VHPT(d)     (0)
144#endif
145
146
147struct arch_vcpu {
148    /* Save the state of vcpu.
149       This is the first entry to speed up accesses.  */
150    mapped_regs_t *privregs;
151
152    /* TR and TC.  */
153    TR_ENTRY itrs[NITRS];
154    TR_ENTRY dtrs[NDTRS];
155    TR_ENTRY itlb;
156    TR_ENTRY dtlb;
157
158    /* Bit is set if there is a tr/tc for the region.  */
159    unsigned char itr_regions;
160    unsigned char dtr_regions;
161    unsigned char tc_regions;
162
163    unsigned long irr[4];           /* Interrupt request register.  */
164    unsigned long insvc[4];             /* Interrupt in service.  */
165    unsigned long iva;
166    unsigned long domain_itm;
167    unsigned long domain_itm_last;
168
169    unsigned long event_callback_ip;            // event callback handler
170    unsigned long failsafe_callback_ip;         // Do we need it?
171
172    /* These fields are copied from arch_domain to make access easier/faster
173       in assembly code.  */
174    unsigned long metaphysical_rr0;             // from arch_domain (so is pinned)
175    unsigned long metaphysical_rr4;             // from arch_domain (so is pinned)
176    unsigned long metaphysical_saved_rr0;       // from arch_domain (so is pinned)
177    unsigned long metaphysical_saved_rr4;       // from arch_domain (so is pinned)
178    unsigned long fp_psr;       // used for lazy float register
179    int breakimm;                       // from arch_domain (so is pinned)
180    int starting_rid;           /* first RID assigned to domain */
181    int ending_rid;             /* one beyond highest RID assigned to domain */
182
183    struct thread_struct _thread;       // this must be last
184
185    thash_cb_t vtlb;
186    thash_cb_t vhpt;
187    char irq_new_pending;
188    char irq_new_condition;    // vpsr.i/vtpr change, check for pending VHPI
189    char hypercall_continuation;
190
191    //for phycial  emulation
192    int mode_flags;
193    fpswa_ret_t fpswa_ret;      /* save return values of FPSWA emulation */
194    struct timer hlt_timer;
195    struct arch_vmx_struct arch_vmx; /* Virtual Machine Extensions */
196
197#ifdef CONFIG_XEN_IA64_PERVCPU_VHPT
198    PTA                 pta;
199    unsigned long       vhpt_maddr;
200    struct page_info*   vhpt_page;
201    unsigned long       vhpt_entries;
202#endif
203#define INVALID_PROCESSOR       INT_MAX
204    int last_processor;
205    cpumask_t cache_coherent_map;
206};
207
208#include <asm/uaccess.h> /* for KERNEL_DS */
209#include <asm/pgtable.h>
210
211/* Guest physical address of IO ports space.  */
212#define IO_PORTS_PADDR          0x00000ffffc000000UL
213#define IO_PORTS_SIZE           0x0000000004000000UL
214
215int
216do_perfmon_op(unsigned long cmd,
217              XEN_GUEST_HANDLE(void) arg1, unsigned long arg2);
218
219#endif /* __ASM_DOMAIN_H__ */
220
221/*
222 * Local variables:
223 * mode: C
224 * c-set-style: "BSD"
225 * c-basic-offset: 4
226 * tab-width: 4
227 * indent-tabs-mode: nil
228 * End:
229 */
Note: See TracBrowser for help on using the repository browser.