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