]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/xen/interface/arch-ia64/hvm/save.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / xen / interface / arch-ia64 / hvm / save.h
1 /******************************************************************************
2  * save_types.h
3  *
4  * Copyright (c) 2007 Isaku Yamahata <yamahata at valinux co jp>
5  *                    VA Linux Systems Japan K.K.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a copy
8  * of this software and associated documentation files (the "Software"), to
9  * deal in the Software without restriction, including without limitation the
10  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11  * sell copies of the Software, and to permit persons to whom the Software is
12  * furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in
15  * all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23  * DEALINGS IN THE SOFTWARE.
24  */
25
26 #ifndef __XEN_PUBLIC_HVM_SAVE_IA64_H__
27 #define __XEN_PUBLIC_HVM_SAVE_IA64_H__
28
29 #include "../../hvm/save.h"
30 #include "../../arch-ia64.h"
31
32 /* 
33  * Save/restore header: general info about the save file. 
34  */
35
36 /* x86 uses 0x54381286 */
37 #define HVM_FILE_MAGIC   0x343641492f6e6558UL   /* "Xen/IA64" */
38 #define HVM_FILE_VERSION 0x0000000000000001UL
39
40 struct hvm_save_header {
41     uint64_t magic;             /* Must be HVM_FILE_MAGIC */
42     uint64_t version;           /* File format version */
43     uint64_t changeset;         /* Version of Xen that saved this file */
44     uint64_t cpuid[5];          /* CPUID[0x01][%eax] on the saving machine */
45 };
46
47 DECLARE_HVM_SAVE_TYPE(HEADER, 1, struct hvm_save_header);
48
49 /*
50  * CPU
51  */
52 struct hvm_hw_ia64_cpu {
53     uint64_t    ipsr;
54 };
55 DECLARE_HVM_SAVE_TYPE(CPU, 2, struct hvm_hw_ia64_cpu);
56
57 /*
58  * CPU
59  */
60 struct hvm_hw_ia64_vpd {
61     struct vpd      vpd;
62 };
63 DECLARE_HVM_SAVE_TYPE(VPD, 3, struct hvm_hw_ia64_vpd);
64
65 /*
66  * device dependency
67  * vacpi => viosapic => vlsapic
68  */
69 /*
70  * vlsapic
71  */
72 struct hvm_hw_ia64_vlsapic {
73     uint64_t insvc[4];
74     uint64_t vhpi; // ??? should this be saved in vpd
75     uint8_t xtp;
76     uint8_t pal_init_pending;
77     uint8_t pad[2];
78 };
79 DECLARE_HVM_SAVE_TYPE(VLSAPIC, 4, struct hvm_hw_ia64_vlsapic);
80 /* set
81  * unconditionaly set v->arch.irq_new_peding = 1 
82  * unconditionaly set v->arch.irq_new_condition = 0
83  */
84
85 /*
86  * vtime
87  */
88 /* itc, itm, itv are saved by arch vcpu context */
89 struct hvm_hw_ia64_vtime {
90     uint64_t itc;
91     uint64_t itm;
92
93     uint64_t last_itc;
94     uint64_t pending;
95 };
96 DECLARE_HVM_SAVE_TYPE(VTIME, 5, struct hvm_hw_ia64_vtime);
97 /*
98  * calculate v->vtm.vtm_offset
99  * ??? Or should vtm_offset be set by leave_hypervisor_tail()?
100  * start vtm_timer if necessary by vtm_set_itm().
101  * ??? Or should vtm_timer be set by leave_hypervisor_tail()?
102  *
103  * ??? or should be done by schedule_tail()
104  *        => schedule_tail() should do.
105  */
106
107 /*
108  * viosapic
109  */
110 #define VIOSAPIC_NUM_PINS     48
111
112 /* To share VT-d code which uses vioapic_redir_entry.
113  * Although on ia64 this is for vsapic, but we have to vioapic_redir_entry
114  * instead of viosapic_redir_entry.
115  */
116 union vioapic_redir_entry
117 {
118     uint64_t bits;
119     struct {
120         uint8_t vector;
121
122         uint8_t delivery_mode  : 3;
123         uint8_t reserve1       : 1;
124         uint8_t delivery_status: 1;
125         uint8_t polarity       : 1;
126         uint8_t reserve2       : 1;
127         uint8_t trig_mode      : 1;
128
129         uint8_t mask           : 1;
130         uint8_t reserve3       : 7;
131
132         uint8_t reserved[3];
133         uint16_t dest_id;
134     } fields;
135 };
136
137 struct hvm_hw_ia64_viosapic {
138     uint64_t    irr;
139     uint64_t    isr;
140     uint32_t    ioregsel;
141     uint32_t    pad;
142     uint64_t    lowest_vcpu_id;
143     uint64_t    base_address;
144     union vioapic_redir_entry  redirtbl[VIOSAPIC_NUM_PINS];
145 };
146 DECLARE_HVM_SAVE_TYPE(VIOSAPIC, 6, struct hvm_hw_ia64_viosapic);
147   
148 /*
149  * vacpi
150  * PM timer
151  */
152 struct vacpi_regs {
153     union {
154         struct {
155             uint32_t pm1a_sts:16;/* PM1a_EVT_BLK.PM1a_STS: status register */
156             uint32_t pm1a_en:16; /* PM1a_EVT_BLK.PM1a_EN: enable register */
157         };
158         uint32_t evt_blk;
159     };
160     uint32_t tmr_val;   /* PM_TMR_BLK.TMR_VAL: 32bit free-running counter */
161 };
162
163 struct hvm_hw_ia64_vacpi {
164     struct vacpi_regs   regs;
165 };
166 DECLARE_HVM_SAVE_TYPE(VACPI, 7, struct hvm_hw_ia64_vacpi);
167 /* update last_gtime and setup timer of struct vacpi */
168
169 /*
170  * opt_feature: identity mapping of region 4, 5 and 7.
171  * With the c/s 16396:d2935f9c217f of xen-ia64-devel.hg,
172  * opt_feature hypercall supports only region 4,5,7 identity mappings.
173  * structure hvm_hw_ia64_identity_mappings only supports them.
174  * The new structure, struct hvm_hw_ia64_identity_mappings, is created to
175  * avoid to keep up with change of the xen/ia64 internal structure, struct
176  * opt_feature.
177  *
178  * If it is enhanced in the future, new structure will be created.
179  */
180 struct hvm_hw_ia64_identity_mapping {
181     uint64_t on;        /* on/off */
182     uint64_t pgprot;    /* The page protection bit mask of the pte. */
183     uint64_t key;       /* A protection key. */
184 };
185
186 struct hvm_hw_ia64_identity_mappings {
187     struct hvm_hw_ia64_identity_mapping im_reg4;/* Region 4 identity mapping */
188     struct hvm_hw_ia64_identity_mapping im_reg5;/* Region 5 identity mapping */
189     struct hvm_hw_ia64_identity_mapping im_reg7;/* Region 7 identity mapping */
190 };
191 DECLARE_HVM_SAVE_TYPE(OPT_FEATURE_IDENTITY_MAPPINGS, 8, struct hvm_hw_ia64_identity_mappings);
192
193 /* 
194  * Largest type-code in use
195  */
196 #define HVM_SAVE_CODE_MAX       8
197
198 #endif /* __XEN_PUBLIC_HVM_SAVE_IA64_H__ */
199
200 /*
201  * Local variables:
202  * mode: C
203  * c-set-style: "BSD"
204  * c-basic-offset: 4
205  * tab-width: 4
206  * indent-tabs-mode: nil
207  * End:
208  */