1 #ifndef __XEN_X86_SHARED_H__
2 #define __XEN_X86_SHARED_H__
3 
4 #define nmi_reason(d) (!has_32bit_shinfo(d) ?                             \
5                        (u32 *)&(d)->shared_info->native.arch.nmi_reason : \
6                        (u32 *)&(d)->shared_info->compat.arch.nmi_reason)
7 
8 #define GET_SET_SHARED(type, field)                             \
9 static inline type arch_get_##field(const struct domain *d)     \
10 {                                                               \
11     return !has_32bit_shinfo(d) ?                               \
12            d->shared_info->native.arch.field :                  \
13            d->shared_info->compat.arch.field;                   \
14 }                                                               \
15 static inline void arch_set_##field(struct domain *d,           \
16                                     type val)                   \
17 {                                                               \
18     if ( !has_32bit_shinfo(d) )                                 \
19         d->shared_info->native.arch.field = val;                \
20     else                                                        \
21         d->shared_info->compat.arch.field = val;                \
22 }
23 
24 #define GET_SET_VCPU(type, field)                               \
25 static inline type arch_get_##field(const struct vcpu *v)       \
26 {                                                               \
27     return !has_32bit_shinfo(v->domain) ?                       \
28            v->vcpu_info->native.arch.field :                    \
29            v->vcpu_info->compat.arch.field;                     \
30 }                                                               \
31 static inline void arch_set_##field(struct vcpu *v,             \
32                                     type val)                   \
33 {                                                               \
34     if ( !has_32bit_shinfo(v->domain) )                         \
35         v->vcpu_info->native.arch.field = val;                  \
36     else                                                        \
37         v->vcpu_info->compat.arch.field = val;                  \
38 }
39 
40 GET_SET_SHARED(unsigned long, max_pfn)
41 GET_SET_SHARED(xen_pfn_t, pfn_to_mfn_frame_list_list)
42 GET_SET_SHARED(unsigned long, nmi_reason)
43 
44 GET_SET_VCPU(unsigned long, cr2)
45 
46 #undef GET_SET_VCPU
47 #undef GET_SET_SHARED
48 
49 #endif /* __XEN_X86_SHARED_H__ */
50