1 #include <xen/sched.h>
2 
3 #include <asm/domain.h>
4 #include <asm/processor.h>
5 
6 #include <public/xen.h>
7 
8 /* C(hyp,user), hyp is Xen internal name, user is user API name. */
9 
10 #define ALLREGS \
11     C(r0,r0_usr);   C(r1,r1_usr);   C(r2,r2_usr);   C(r3,r3_usr);   \
12     C(r4,r4_usr);   C(r5,r5_usr);   C(r6,r6_usr);   C(r7,r7_usr);   \
13     C(r8,r8_usr);   C(r9,r9_usr);   C(r10,r10_usr); C(r11,r11_usr); \
14     C(r12,r12_usr); \
15     C(sp_usr,sp_usr); \
16     C(lr,lr_usr); \
17     C(spsr_irq,spsr_irq); C(lr_irq,lr_irq); C(sp_irq,sp_irq); \
18     C(spsr_svc,spsr_svc); C(lr_svc,lr_svc); C(sp_svc,sp_svc); \
19     C(spsr_abt,spsr_abt); C(lr_abt,lr_abt); C(sp_abt,sp_abt); \
20     C(spsr_und,spsr_und); C(lr_und,lr_und); C(sp_und,sp_und); \
21     C(spsr_fiq,spsr_fiq); C(sp_fiq,sp_fiq); C(sp_fiq,sp_fiq); \
22     C(r8_fiq,r8_fiq); C(r9_fiq,r9_fiq); \
23     C(r10_fiq,r10_fiq); C(r11_fiq,r11_fiq); C(r12_fiq,r12_fiq); \
24     C(pc,pc32); \
25     C(cpsr,cpsr)
26 
vcpu_regs_hyp_to_user(const struct vcpu * vcpu,struct vcpu_guest_core_regs * regs)27 void vcpu_regs_hyp_to_user(const struct vcpu *vcpu,
28                            struct vcpu_guest_core_regs *regs)
29 {
30 #define C(hyp,user) regs->user = vcpu->arch.cpu_info->guest_cpu_user_regs.hyp
31     ALLREGS;
32 #undef C
33 }
34 
vcpu_regs_user_to_hyp(struct vcpu * vcpu,const struct vcpu_guest_core_regs * regs)35 void vcpu_regs_user_to_hyp(struct vcpu *vcpu,
36                            const struct vcpu_guest_core_regs *regs)
37 {
38 #define C(hyp,user) vcpu->arch.cpu_info->guest_cpu_user_regs.hyp = regs->user
39     ALLREGS;
40 #undef C
41 }
42 
43 /*
44  * Local variables:
45  * mode: C
46  * c-file-style: "BSD"
47  * c-basic-offset: 4
48  * indent-tabs-mode: nil
49  * End:
50  */
51