1 #ifndef __XEN_X86_SHARED_H__ 2 #define __XEN_X86_SHARED_H__ 3 4 #ifdef CONFIG_COMPAT 5 6 #define nmi_reason(d) (!has_32bit_shinfo(d) ? \ 7 (u32 *)&(d)->shared_info->native.arch.nmi_reason : \ 8 (u32 *)&(d)->shared_info->compat.arch.nmi_reason) 9 10 #define GET_SET_SHARED(type, field) \ 11 static inline type arch_get_##field(const struct domain *d) \ 12 { \ 13 return !has_32bit_shinfo(d) ? \ 14 d->shared_info->native.arch.field : \ 15 d->shared_info->compat.arch.field; \ 16 } \ 17 static inline void arch_set_##field(struct domain *d, \ 18 type val) \ 19 { \ 20 if ( !has_32bit_shinfo(d) ) \ 21 d->shared_info->native.arch.field = val; \ 22 else \ 23 d->shared_info->compat.arch.field = val; \ 24 } 25 26 #define GET_SET_VCPU(type, field) \ 27 static inline type arch_get_##field(const struct vcpu *v) \ 28 { \ 29 const vcpu_info_t *vi = v->vcpu_info_area.map; \ 30 \ 31 return !has_32bit_shinfo(v->domain) ? \ 32 vi->native.arch.field : vi->compat.arch.field; \ 33 } \ 34 static inline void arch_set_##field(struct vcpu *v, \ 35 type val) \ 36 { \ 37 vcpu_info_t *vi = v->vcpu_info_area.map; \ 38 \ 39 if ( !has_32bit_shinfo(v->domain) ) \ 40 vi->native.arch.field = val; \ 41 else \ 42 vi->compat.arch.field = val; \ 43 } 44 45 #else 46 47 #define nmi_reason(d) (&(d)->shared_info->arch.nmi_reason) 48 49 #define GET_SET_SHARED(type, field) \ 50 static inline type arch_get_##field(const struct domain *d) \ 51 { \ 52 return d->shared_info->arch.field; \ 53 } \ 54 static inline void arch_set_##field(struct domain *d, \ 55 type val) \ 56 { \ 57 d->shared_info->arch.field = val; \ 58 } 59 60 #define GET_SET_VCPU(type, field) \ 61 static inline type arch_get_##field(const struct vcpu *v) \ 62 { \ 63 const vcpu_info_t *vi = v->vcpu_info_area.map; \ 64 \ 65 return vi->arch.field; \ 66 } \ 67 static inline void arch_set_##field(struct vcpu *v, \ 68 type val) \ 69 { \ 70 vcpu_info_t *vi = v->vcpu_info_area.map; \ 71 \ 72 vi->arch.field = val; \ 73 } 74 75 #endif 76 77 GET_SET_SHARED(unsigned long, max_pfn) 78 GET_SET_SHARED(xen_pfn_t, pfn_to_mfn_frame_list_list) 79 GET_SET_SHARED(unsigned long, nmi_reason) 80 81 GET_SET_VCPU(unsigned long, cr2) 82 83 #undef GET_SET_VCPU 84 #undef GET_SET_SHARED 85 86 #endif /* __XEN_X86_SHARED_H__ */ 87