This commit was generated by cvs2svn to compensate for changes in r925,
[linux-2.6.git] / include / asm-xen / xen-public / arch-ia64.h
1 /******************************************************************************
2  * arch-ia64/hypervisor-if.h
3  * 
4  * Guest OS interface to IA64 Xen.
5  */
6
7 #ifndef __HYPERVISOR_IF_IA64_H__
8 #define __HYPERVISOR_IF_IA64_H__
9
10 // "packed" generates awful code
11 #define PACKED
12
13 /* Pointers are naturally 64 bits in this architecture; no padding needed. */
14 #define _MEMORY_PADDING(_X)
15 #define MEMORY_PADDING 
16
17 #ifndef __ASSEMBLY__
18
19 /* NB. Both the following are 64 bits each. */
20 typedef unsigned long memory_t;   /* Full-sized pointer/address/memory-size. */
21 typedef unsigned long cpureg_t;   /* Full-sized register.                    */
22
23 typedef struct
24 {
25 } PACKED execution_context_t;
26
27 /*
28  * NB. This may become a 64-bit count with no shift. If this happens then the 
29  * structure size will still be 8 bytes, so no other alignments will change.
30  */
31 typedef struct {
32     u32  tsc_bits;      /* 0: 32 bits read from the CPU's TSC. */
33     u32  tsc_bitshift;  /* 4: 'tsc_bits' uses N:N+31 of TSC.   */
34 } PACKED tsc_timestamp_t; /* 8 bytes */
35
36 #include <asm/tlb.h>    /* TR_ENTRY */
37
38 typedef struct {
39         unsigned long ipsr;
40         unsigned long iip;
41         unsigned long ifs;
42         unsigned long precover_ifs;
43         unsigned long isr;
44         unsigned long ifa;
45         unsigned long iipa;
46         unsigned long iim;
47         unsigned long unat;  // not sure if this is needed until NaT arch is done
48         unsigned long tpr;
49         unsigned long iha;
50         unsigned long itir;
51         unsigned long itv;
52         unsigned long pmv;
53         unsigned long cmcv;
54         unsigned long pta;
55         int interrupt_collection_enabled; // virtual psr.ic
56         int interrupt_delivery_enabled; // virtual psr.i
57         int pending_interruption;
58         int incomplete_regframe;        // see SDM vol2 6.8
59         unsigned long delivery_mask[4];
60         int metaphysical_mode;  // 1 = use metaphys mapping, 0 = use virtual
61         int banknum;    // 0 or 1, which virtual register bank is active
62         unsigned long bank0_regs[16]; // bank0 regs (r16-r31) when bank1 active
63         unsigned long bank1_regs[16]; // bank1 regs (r16-r31) when bank0 active
64         unsigned long rrs[8];   // region registers
65         unsigned long krs[8];   // kernel registers
66         unsigned long pkrs[8]; // protection key registers
67         // FIXME:  These shouldn't be here as they can be overwritten by guests
68         // and validation at TLB miss time would be too expensive.
69         TR_ENTRY itrs[NITRS];
70         TR_ENTRY dtrs[NDTRS];
71         TR_ENTRY itlb;
72         TR_ENTRY dtlb;
73         unsigned long itlb_pte;
74         unsigned long dtlb_pte;
75         unsigned long irr[4];
76         unsigned long insvc[4];
77         unsigned long iva;
78         unsigned long dcr;
79         unsigned long itc;
80         unsigned long domain_itm;
81         unsigned long domain_itm_last;
82         unsigned long xen_itm;
83         unsigned long xen_timer_interval;
84 //} PACKED arch_shared_info_t;
85 } arch_vcpu_info_t;             // DON'T PACK 
86
87 typedef struct {
88 } arch_shared_info_t;           // DON'T PACK 
89
90 /*
91  * The following is all CPU context. Note that the i387_ctxt block is filled 
92  * in by FXSAVE if the CPU has feature FXSR; otherwise FSAVE is used.
93  */
94 typedef struct {
95     //unsigned long flags;
96 } PACKED full_execution_context_t;
97
98 #endif /* !__ASSEMBLY__ */
99
100 #endif /* __HYPERVISOR_IF_IA64_H__ */